1. 程式人生 > >springboot配置多種型別多資料來源(mysql+postgresql+presto(資料倉庫))yml方式整合分頁

springboot配置多種型別多資料來源(mysql+postgresql+presto(資料倉庫))yml方式整合分頁

宣告:

此處示例為mysql和postgresql資料庫和presto 三種類型資料庫源

mysql與postgresql都屬於資料庫所以這裡簡寫只配置postgresql庫

presto是資料倉庫在配置資料來源測試時會遇到很多坑,等下詳細描述

首先

宣告:我專案的springboot配置資料來源的檔案是yml方式的,對於properties格式的請童鞋自行轉換寫法

第一步:yml配置資料來源程式碼。yml編寫必須注意格式縮排!!!


第二步pom檔案引入的驅動

<!-- Postgresql 資料驅動 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4.1212</version>
        </dependency>
<dependency>
            <groupId>com.facebook.presto</groupId>
            <artifactId>presto-jdbc</artifactId>
            <version>0.203</version>
        </dependency>
 <!-- MySQL 連線驅動依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector}</version>
        </dependency>

資料庫的驅動。presto的驅動必須是此groupId的否則無法對應請注意

第三步配置springboot載入資料來源到spring中

1配置postgresql資料來源 注意 @ConfigurationProperties(prefix = "postgresql.spring.datasource.pa")要與yml中配置一致



import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.util.Properties;
/**
 * @ClassName DataSourcePostgresqlConfig
 * @Description 配置postgresql資料來源
 * @Author qixin
 * @Date 2018/7/6 10:14
 * Version 1.0
 **/
/*pa資料庫*/
@Configuration
@MapperScan(basePackages = "com.renrenche.databus.dao.logdata", sqlSessionTemplateRef  = "paSqlSessionTemplate")
public class DataSourcePostgresqlConfig {
    private final static Logger logger = LoggerFactory.getLogger(DataSourcePostgresqlConfig.class);
    @Bean(name = "paDataSource")
    @ConfigurationProperties(prefix = "postgresql.spring.datasource.pa")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "paSqlSessionFactory")
    @Primary /*此處必須在主資料庫的資料來源配置上加上@Primary*/
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("paDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        /*載入mybatis全域性配置檔案*/
        //bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
        /*載入所有的mapper.xml對映檔案*/
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/logdata/*.xml"));
        //新增外掛  (改為使用配置檔案載入了)
        bean.setPlugins(new Interceptor[]{pageHelper()});
        logger.info("載入postgresql資料庫連線......");
        return bean.getObject();
    }

    @Bean(name = "paTransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("paDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "paSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("paSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean
    public PageHelper pageHelper(){
       // logger.info("MyBatis分頁外掛PageHelper");
        //分頁外掛
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("offsetAsPageNum", "true");
        properties.setProperty("rowBoundsWithCount", "true");
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("params", "count=countSql");
        pageHelper.setProperties(properties);
        return pageHelper;
    }

}

2配置另一個數據源presto。這裡要重點說明一下因為我專案是springboot+mybatis,mybatis的整合presto資料倉庫不支援預載入,所以配置之後如果用mybatis的xml寫sql呼叫資料庫查詢資料必須配置一個引數

statementType="STATEMENT"  此處很重要!!!!! 否則執行sql會報錯拋異常


第二個資料來源配置



import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
/**
 * @ClassName DataSourcePrestoConfig
 * @Description 配置presto資料來源
 * @Author qixin
 * @Date 2018/7/6 10:14
 * Version 1.0
 **/
/*marketing資料庫*/
@Configuration
@MapperScan(basePackages = "com.renrenche.databus.dao.test", sqlSessionTemplateRef  = "marketingSqlSessionTemplate")
public class DataSourcePrestoConfig {
    private final static Logger logger = LoggerFactory.getLogger(DataSourcePrestoConfig.class);
    @Bean(name = "marketingDataSource")
    @ConfigurationProperties(prefix = "presto.spring.datasource.marketing")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "marketingSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("marketingDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        /*載入mybatis全域性配置檔案*/
        //bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
        /*載入所有的mapper.xml對映檔案*/

        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/test/*.xml"));
        logger.info("載入presto資料庫連線......");
        return bean.getObject();
    }

    @Bean(name = "marketingTransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("marketingDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "marketingSqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("marketingSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }


}

以上就是springboot配置兩個資料來源的yml+pom+config配置檔案。只需將這三步配好,除錯即可

注:配置config時包掃描路徑一定要正確

結束

感謝觀看!