springbootdruidmybatis多資料來源配置
spring boot 在配置時做了很多簡化配置的設定,但是簡化的配置往往已犧牲一定的定製化,比如在資料來源的配置時,spring boot 只提供4種資料庫連線池的配置,其中並不支援常用的druid
閱讀spring boot DataSourceBuilder 的原始碼可以發現 spring boot 提供的4種資料來源型別並不是我們想要的
private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
"org.apache.tomcat.jdbc.pool.DataSource",
"com.zaxxer.hikari.HikariDataSource",
"org.apache.commons.dbcp.BasicDataSource", // deprecated
"org.apache.commons.dbcp2.BasicDataSource" };
但是 DataSourceBuilder 提供了type方法來自定義DataSource型別
public DataSourceBuilder type(Class<? extends DataSource> type) {
this.type = type;
return this;
}
知道了方法,下面配置就簡單許多了
首先是application.properties 檔案的配置
spring.datasource.sso.url=jdbc:mysql://localhost:3306/sso?useSSL=false
spring.datasource.sso.username=root
spring.datasource.sso.password=root
spring.datasource.sso.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.sso.max-idle=5
spring.datasource.sso.max-wait=10000
spring.datasource.sso.min-idle=1
spring.datasource.sso.initial-size=1
spring.datasource.sso.validation-query=SELECT 1
spring.datasource.sso.test-on-borrow=false
spring.datasource.sso.test-while-idle=true
spring.datasource.sso.time-between-eviction-runs-millis=18800
spring.datasource.message.url=jdbc:mysql://localhost:3306/message?useSSL=false
spring.datasource.message.username=root
spring.datasource.message.password=root
spring.datasource.message.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.message.max-idle=5
spring.datasource.message.max-wait=10000
spring.datasource.message.min-idle=1
spring.datasource.message.initial-size=1
spring.datasource.message.validation-query=SELECT 1
spring.datasource.message.test-on-borrow=false
spring.datasource.message.test-while-idle=true
spring.datasource.message.time-between-eviction-runs-millis=18800
然後是具體的主資料來源配置類
@Configuration
@MapperScan(basePackages = {"org.vergil.demo.core.dao.mapper.sso"}, sqlSessionFactoryRef = "ssoSqlSessionFactory")
public class SsoConfig {
@Bean(name = "ssoDataSource")
@ConfigurationProperties(prefix = "spring.datasource.sso")
@Primary
public DataSource ssoDataSource() {
//指定使用DruidDataSource
return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
}
@Bean(name = "ssoSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("ssoDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/sso/*.xml"));
return bean.getObject();
}
@Primary
@Bean(name = "ssoTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("ssoDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "ssoSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("ssoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@ConfigurationProperties(prefix = “spring.datasource.sso”) 引入配置項
使用如下方式來建立DruidDataSource,簡化配置
return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
第二資料來源
@Configuration
@MapperScan(basePackages = {"org.vergil.demo.core.dao.mapper.message"}, sqlSessionFactoryRef = "messageSqlSessionFactory")
public class MessageConfig {
@Bean(name = "messageDataSource")
@ConfigurationProperties(prefix = "spring.datasource.message")
public DataSource messageDataSource() {
return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
}
@Bean(name = "messageSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("messageDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/message/*.xml"));
return bean.getObject();
}
@Bean(name = "messageTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("messageDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "messageSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("messageSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
資料來源配置完畢
每個資料來源都會生成自己的sqlSession,相互獨立
相關文章
- 多資料來源配置
- MyBatis配置多資料來源MyBatis
- web 配置多資料來源Web
- Spring多資料來源配置Spring
- Spring配置多資料來源Spring
- Spring Boot 配置多資料來源Spring Boot
- Spring Boot 多資料來源配置Spring Boot
- springboot多資料來源配置Spring Boot
- springBoot 多資料來源配置Spring Boot
- SpringBoot配置多資料來源Spring Boot
- SpringBoot 配置多資料來源 MyBatisSpring BootMyBatis
- SpringBoot 的多資料來源配置Spring Boot
- SpringMVC連線多資料來源配置SpringMVC
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- 使用Spring Boot配置多個資料來源 - UdithSpring Boot
- spring 配置多個資料來源的檔案Spring
- Spring+MyBatis多資料來源配置實現SpringMyBatis
- jndi配置資料來源
- 【教程】Spring+Mybatis環境配置多資料來源SpringMyBatis
- 如何用hutool-db實現多資料來源配置
- 多資料來源與動態資料來源的權衡
- tomcat配置資料來源Tomcat
- Springboot 多資料來源配置,結合tk-mybatisSpring BootMyBatis
- Spring boot 如何快速的配置多個 Redis 資料來源Spring BootRedis
- Springboot 配置多資料來源Mybatis的UnderScore不生效Spring BootMyBatis
- 基於xml的Spring多資料來源配置和使用XMLSpring
- SpringBoot多資料來源Spring Boot
- weblogic配置JDBC資料來源WebJDBC
- DataV配置VPC資料來源教程
- tomcat JNDI資料來源配置Tomcat
- springboot+druid+mybatis plus的多資料來源配置Spring BootUIMyBatis
- 基於註解的Spring多資料來源配置和使用Spring
- springboot 配置多個資料來源,@MapperScan方式繫結Spring BootAPP
- Spring多資料來源獲取Spring
- 實現多資料來源事務
- 多個資料來源的問題
- ODBC 常見資料來源配置整理
- BIRT 如何配置動態資料來源