1、在配置文件中定义多数据源
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://127.0.0.1:3306/test1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true&zeroDateTimeBehavior=convertToNull
spring.datasource.test1.username=test1
spring.datasource.test1.password=test1
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.jdbc-url=jdbc:mysql://127.0.0.1:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true&zeroDateTimeBehavior=convertToNull
spring.datasource.test2.username=test2
spring.datasource.test2.password=test2
Tips:
- spring.datasource.url应改为spring.datasource.jdbc-url,否则会报错(Cause: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.)。
2、新建数据源配置类
(1)新建数据源test1的配置类:
@Configuration
@MapperScan(basePackages = "cc.rener.datasourcetest.mapper1", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DbsportDatasourceConfig {
@Bean("test1DataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource getDbsport(){
return DataSourceBuilder.create().build();
}
@Bean("test1SqlSessionFactory")
@Primary
public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("testSqlSessiontTemplate")
@Primary
public SqlSessionTemplate test1SqlSessiontTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
(2)新建test2数据源配置类:
@Configuration
@MapperScan(basePackages = "cc.rener.datasourcetest.mapper2", sqlSessionFactoryRef = "dbprofileSqlSessionFactory")
public class Test2DataSourceConfig {
@Bean("test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource getTest2DataSource(){
return DataSourceBuilder.create().build();
}
@Bean("test2SqlSessionFactory")
public SqlSessionFactory test2SessionFactory(@Qualifier("test2DataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("test2SqlSessiontTemplate")
public SqlSessionTemplate test2SqlSessiontTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
Tips:
- @Primary注解表明test1数据源为主数据源,即默认数据源,不可不加。
- @MapperScan注解指定相应数据源的Mapper文件路径(若有其他配置或xml可在对应SqlSessionFactory
中加以配置)。 - @ConfigurationProperties注解指定该数据源配置在properties文件中的前缀。