前言:
由于项目中用到了多个数据源,所以需要配置多数据源。这时候就不能使用springboot的默认数据源加载了,需要自定义多个数据源。
一、配置准备
看了springboot的doc和一些博主的经验之谈,发现配置多数据源并不麻烦。选择了一种比较简单的方式,自定义DataSource,SqlSessionFactoryBean,SqlSessionTemplate和DataSourceTransactionManager等。
二、多数据源加载类以及配置文件
1.配置多个数据源在application.yaml中
spring:
datasource:
datasource-xxorder:
name: datasource-xxorder
url: jdbc:mysql://{$host}:{$port}/{$db}?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull
username: xxxx
password: xxxx
driver-class-name: com.mysql.jdbc.Driver
max-pool-size: 20
max-active: 10
max-idle: 5
min-idle: 2
initial-size: 2
validation-query: select 1
test-on-borrow: true
test-on-return: false
test-while-idle: false
time-between-eviction-runs-millis: 3000
min-evictable-idle-time-millis: 3000
max-wait: 3000
jmx-enabled: true
datasource-xxauth:
name: datasource-xxauth
url: jdbc:mysql://{$host}:{$port}/{$db}?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull
username: xxxxxx
password: xxxxxx
driver-class-name: com.mysql.jdbc.Driver
max-pool-size: 20
max-active: 10
max-idle: 5
min-idle: 2
initial-size: 2
validation-query: select 1
test-on-borrow: true
test-on-return: false
test-while-idle: false
time-between-eviction-runs-millis: 3000
min-evictable-idle-time-millis: 3000
max-wait: 3000
jmx-enabled: true
2.datasource 配置类,要让springboot能自动加载自定义的数据源
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "xxOrderDSProperties")
@Qualifier("xxOrderDSProperties")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public DataSourceProperties xxOrderDSProperties(){//这是是用hikariCP的时候用的
return new DataSourceProperties();
}
@Bean(name = "xxAuthDSProperties")
@Qualifier("xxAuthDSProperties")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxauth")
public DataSourceProperties xxAuthDSProperties(){
return new DataSourceProperties();
}
@Primary
@Bean(name = "xxorderDS")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public HikariDataSource dataSourceOrder(){
//return DruidDataSourceBuilder.create().build(); //使用druidCP时打开这个注释,同时注释掉下面一行
return xxOrderDSProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean(name = "xxauthDS")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxauth")
public HikariDataSource dataSourceAuth(){
//return DruidDataSourceBuilder.create().build();//使用druidCP时打开这个注释,同时注释掉下面一行
return xxAuthDSProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}}
说明:
i.对于数据源加载配置来讲,springboot2.0 默认的数据库连接池用的