SpringBoot基于注解形式配置多数据源@DS

本文介绍了如何在SpringBoot项目中使用dynamic-datasource-spring-boot-starter插件配置Druid动态数据源,包括配置文件application-pro.yml的详细设置,以及如何在mapper接口中根据需要切换不同数据源的操作。

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

@TOC()

1.引入依赖

      <!-- dynamic-datasource 多数据源-->
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>3.5.2</version>
      </dependency>

2.配置文件 application-pro.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为 master
      primary: master
      # 严格模式 匹配不到数据源则报错
      strict: true
      datasource:
		# 主库从库名字自定义
        # 主库
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: xxx
          password: xxxxx
          url: jdbc:mysql://192.168.1.1:3306/database1?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
        # 从库1  
		slave:
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: xxx
          password: xxxxx
          url: jdbc:mysql://192.168.1.2:3307/database2?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
        # 从库2
		slave2:
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: xxx
          password: xxxxx
          url: jdbc:mysql://192.168.1.3:3308/database3?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai		
      druid:
        enable: true
        max-active: 150
        min-idle: 50
        initial-size: 50
        max-wait: 60000
        time-between-eviction-runs-millis: 60000
        validation-query: select server_status()
        test-on-return: false
        test-while-idle: true
        test-on-borrow: false
        async-close-connection-enable: true
        async-init: true

3.对应mapper接口使用不同的数据源

import com.baomidou.dynamic.datasource.annotation.DS;

@Mapper
public class UserService {
 	// m默认使用名为 "master" 的数据源
    public void updateUser(User user) {
        // 创建用户
    }
    
    @DS("master") // 使用名为 "master" 的数据源
    public void createUser(User user) {
        // 创建用户
    }

    @DS("slave") // 使用名为 "slave" 的数据源
    public User getUserById(long id) {
        // 根据ID获取用户
        return null;
    }
	@DS("slave1") // 使用名为 "slave1" 的数据源
    public User getUserById(long id) {
        // 根据ID获取用户
        return null;
    }
    // 其他方法...
}

4.对应mapper接口使用相同的数据源

import com.baomidou.dynamic.datasource.annotation.DS;
// 使用名为 "master" 的数据源
@Mapper
@DS("master")
public class UserService {

 
    public void createUser(User user) {
        // 创建用户
    }

  
    public User getUserById(long id) {
        // 根据ID获取用户
        return null;
    }

    public User getUserById(long id) {
        // 根据ID获取用户
        return null;
    }
    // 其他方法...
}

### Spring Boot配置多数据源并使用 `@DS` 注解的完整代码示例 以下是基于提供的引用内容以及专业知识构建的一个完整的 Spring Boot 多数据源配置方案,其中包括如何使用 `@DS` 注解指定不同的数据源。 #### 1. 添加依赖 在项目的 `pom.xml` 文件中引入动态数据源启动器: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency> ``` 此部分来源于站内引用[^1]。 --- #### 2. 配置 `application.yml` 在 `application.yml` 或 `application.properties` 文件中定义多个数据源及其相关信息。以下是一个典型的 YAML 配置示例: ```yaml spring: datasource: dynamic: primary: master # 设置主数据源名称 strict: false # 是否严格匹配数据源,默认false表示如果找不到对应的数据源则回退到主数据源 datasource: master: username: root password: 123456 url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver slave: username: user password: abcdefg url: jdbc:mysql://localhost:3306/slave_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver ``` 该部分内容来自站内引用[^3],并对字段进行了扩展说明。 --- #### 3. 创建数据源配置类 创建一个 Java 类用于加载主数据源和其他数据源的相关参数。例如: ```java import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master") @Data public class MasterDataSourceConfig { private String username; private String password; private String url; private String driverClassName; } ``` 以上代码片段参考自站内引用[^2],适用于主数据源的配置。 对于其他数据源(如从库),也可以按照类似的模式进行声明。 --- #### 4. 使用 `@DS` 注解切换数据源 通过 MyBatis Plus 提供的 `@DS` 注解可以在运行时动态切换数据源。具体应用方式如下所示: ##### (1)在 Mapper 接口中使用 `@DS` 注解 当某个接口需要访问特定数据源时,在其上标注 `@DS` 即可: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.dynamic.datasource.annotation.DS; @DS("slave") // 切换至从库 public interface SlaveUserMapper extends BaseMapper<User> { // 自定义查询逻辑... } ``` 这部分功能描述源自站内引用[^4]。 ##### (2)在 Service 层方法中使用 `@DS` 注解 如果仅希望某些业务逻辑调用特定数据源,则可在服务层的方法级别添加注解: ```java import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.dynamic.datasource.annotation.DS; import org.springframework.stereotype.Service; @Service public class UserService extends ServiceImpl<UserMapper, User> { @DS("slave") // 当前方法会切换至从库执行 public User findUserById(Long id) { return this.baseMapper.selectById(id); } } ``` 同样依据站内引用[^4]中的指导完成实现。 --- #### 5. 注意事项 - 如果未找到指定的数据源且设置了 `strict=false`,程序将自动回退到主数据源。 - 数据源 URL 和驱动类名需根据实际使用的数据库类型调整。 - 建议测试阶段验证各数据源连通性以减少潜在错误风险。 --- ### 总结 上述代码展示了如何利用 `dynamic-datasource-spring-boot-starter` 插件配合 `@DS` 注解快速搭建一个多数据源环境,并提供了详细的配置流程与注意事项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值