Spring Boot配置多数据源

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文件中的前缀。
springboot多数据源