SpringBoot2.x实践之多数据源配置

Spring 要使用多数据源,须要在 Spring 容器中放入多个 DataSource。DataSource 是 javax.sql 包中的一个接口,这个接口有多种实现,常见的有 c3p0 中的 ComboPooledDataSource 链接池,druid 的 DruidDataSource ,都实现了 DataSource 接口。java

咱们以 druid 举例,经过 @Bean 标签在 Spring 容器中放入多个实例。
多数据源代码以下:mysql

/** * 多数据源配置 */
@Configuration
public class DataSourceAutoConfiguration {

    /** * 数据源一,@Primary 修饰,不指定的状况下默认为此数据源 * 多数据源的状况下不指定默认数据源,EntityManagerFactoryBuilder 会报错 * * @return dataSourceOne */
    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.druid.one")
    public DataSource dataSourceOne() {
        return DruidDataSourceBuilder.create().build();
    }

    /** * 数据源二 * * @return dataSourceTwo */
    @Bean
    @ConfigurationProperties("spring.datasource.druid.two")
    public DataSource dataSourceTwo() {
        return DruidDataSourceBuilder.create().build();
    }

}

多数据源配置以下,两个数据源链接的 url 不同:web

# 数据源一 配置
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=
spring.datasource.druid.one.name=druid-one
# 数据源二 配置
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=
spring.datasource.druid.one.name=druid-one

@Configuration 指定了一个配置类,@Bean 向 Spring 容器中放入多个实例, @ConfigurationProperties 指定了相应配置的前缀,@ConfigurationProperties(“spring.datasource.druid.one”) 会读取 spring.datasource.druid.one 前缀的配置,@ConfigurationProperties(“spring.datasource.druid.two”) 会读取 spring.datasource.druid.two 前缀的配置。spring