SpringBoot + Druid 多数据源配置

本文介绍了如何在SpringBoot项目中结合Druid实现多数据源配置,包括DBTypeEnum枚举类用于标记数据源类型,@DataSource注解在服务层或DAO层切换数据源,DynamicDataSource作为动态数据源的核心,以及相关的Java配置和YAML配置。同时提供了在Mapper层或DAO层通过注解选择数据源的示例,并列举了参考资料。

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

SpringBoot + Druid 多数据源配置

直接上代码~

环境

		<parent>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-parent</artifactId>
			<version>2.2.1.RELEASE</version>
		</parent>
		
		<properties>
			<java.version>1.8</java.version>
		</properties>
		
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

java 代码

  1. DBTypeEnum,多数据源枚举类,标识master和slave之分,增减其他数据源亦方便
public enum DBTypeEnum {
   
    MASTER, SLAVE
}
  1. DataSource注解类,用于在service层或dao层切换数据源,通过value进行区分,这里默认使用master库
@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.TYPE,ElementType.METHOD})
public @interface DataSource {
   
    DBTypeEnum value() default DBTypeEnum.MASTER;
}

3.DBHelper,存储当前线程使用的数据源的key,通过在切面中设置key达到关联数据源的目的

@Component
public class DBHelper {
   

    private ThreadLocal
### Spring Boot与Druid组合使用实现多数据源配置 #### 一、引入依赖 为了支持多数据源功能,需在`pom.xml`文件中添加特定的starter来简化集成过程[^2]。 对于Maven项目而言: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>x.x.x</version><!-- 版本号依据实际需求 --> </dependency> ``` Gradle项目则如下所示: ```groovy implementation 'com.baomidou:dynamic-datasource-spring-boot-starter:x.x.x' //版本号依据实际需求填写 ``` #### 二、定义主数据源bean 通过自定义方法创建并返回一个名为`dataSource()`的数据源实例对象。此部分展示了如何利用@ConfigurationProperties注解绑定属性至相应字段上,并初始化DruidDataSource类型的组件[^1]。 ```java import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @ConfigurationProperties("spring.datasource.primary") @Bean(name = "primaryDataSource") public DruidDataSource primaryDataSource(){ DruidDataSource druidDataSource=new DruidDataSource(); //可在此处进一步定制化druid参数... return druidDataSource ; } ``` #### 三、扩展其他次级数据源beans 除了默认提供给应用程序使用的单一数据库连接池外,还可以按照相同模式继续声明额外的数据源bean以满足不同业务逻辑下的访问需求。这里假设存在第二个数据源secondaryDataSource[]^1]。 ```java @ConfigurationProperties("spring.datasource.secondary") @Bean(name="secondaryDataSource") public DruidDataSource secondaryDataSource(){ DruidDataSource druidDataSource= new DruidDataSource(); //同样可以针对该数据源做个性化调整... return druidDataSource ; } ``` #### 四、注册动态切换策略 为了让程序能够在运行期间灵活地选择合适的目标数据源执行查询操作,还需要编写一段用于管理这些资源间转换关系的小工具类。它通常会继承AbstractRoutingDataSource抽象父类重写其determineCurrentLookupKey()函数完成具体判定流程[^3]。 ```java @Component public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal<String> contextHolder = new ThreadLocal<>(); @Override protected Object determineCurrentLookupKey() { return getContext(); } public void setContext(String dbType){ contextHolder.set(dbType); } public String getContext(){ return Optional.ofNullable(contextHolder.get()).orElse("default"); } } ``` 最后一步就是把之前准备好的各个独立单元组装起来形成完整的解决方案框架了。这涉及到修改application.yml(application.properties)中的相关设定项以及确保所有必要的Java Config已经就位以便于容器能够自动识别加载它们[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值