13.12 多数据源

随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将介绍两种 MyBatis-Plus 的多数据源扩展插件:开源生态的 dynamic-datasource 和 企业级生态的 mybatis-mate。这里介绍开源生态的 dynamic-datasource ,我这里是 SpringBoot3,SpringBoot2的导入依赖有所差异,具体参照 – 官网

13.12.1 使用步骤

13.12.1.1 导入依赖

SpringBoot2 导入的依赖和这个不一样,具体参照官网

<!--   导入动态数据源依赖     -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
    <version>4.3.1</version>
</dependency>
13.12.1.2 配置动态数据源
spring:
  datasource:
    dynamic:
      # 设置默认数据源, 当没有指定数据源时/或者指定数据源不存在,都会默认使用该数据
      primary: master 
      # 是否严格匹配数据源,当指定数据源不存在时,是直接报错还是采用默认的数据源
      strict: false 
      datasource:  # 多数据配置
        master:  #主数据源名称
          url: jdbc:mysql://localhost:3306/db2
          username: root
          password: 123456
#         driver-class-name: com.mysql.cj.jdbc.Driver 可以省略不写
        slave: #从数据源名称
          url: jdbc:mysql://localhost:3306/db1
          username: root
          password: 123456
#        driver-class-name: com.mysql.cj.jdbc.Driver 可以省略不写
13.12.1.3 @DS 切换数据源

这个注解不仅可以作用到类上,同样可以作用到方法上,根据 “就近原则” 当两个同时存在时,方法上的优先

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

13.12.1.4 测试代码演示
@SpringBootTest
class WorkDay07Task01ApplicationTests {

   //只要在两个Service上配置的数据源不同,两个访问的是不同的数据库
   @Autowired
   private UserServiceImpl service;
   @Autowired
   private AccountServiceImpl accountService;

   @Test
   void test01() {
       QueryWrapper<User> wrapper = new QueryWrapper<>();
       wrapper.eq("id", 1214840833);
       service.getOne(wrapper);
   }

   @Test
   void test02() {
       QueryWrapper<Account> wrapper = new QueryWrapper<>();
       wrapper.eq("id", 1);
       accountService.getOne(wrapper);
   }
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐