springboot配置多種型別多資料來源(mysql+postgresql+presto(資料倉庫))yml方式整合分頁
阿新 • • 發佈:2019-01-29
宣告:
此處示例為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時包掃描路徑一定要正確
結束
感謝觀看!