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

本文介绍了在SpringBoot2.x中实现多数据源配置的方法,以DruidDataSource为例,通过@Bean注解创建两个不同的DataSource实例。配置中利用@ConfigurationProperties注解,分别对应不同的配置前缀,实现两个不同URL的数据源连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

/**
 * 多数据源配置
 */
@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 不一样:

# 数据源一 配置
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 前缀的配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值