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