当前位置:   article > 正文

SpringBoot多数据源-DynamicDataSource

SpringBoot多数据源-DynamicDataSource

1.多数据源应用场景

  • 读写分离:数据库主节点压力比较大,需要增加从节点提供读操作,以减少压力。
  • 多数据源:一个复杂的单体项目,因为没有拆分成不同的服务,需要连接多个业务的数据源。
  • 多租户数据源切换:大型租户,每个租户有独立的数据源,需要根据当前租户切换对应的数据源

2.DynamicDataSource原理

  1. 使用 AOP 拦截,方法执行前获取到当前方法要用的数据源
  2. 实现自定义 DataSource 接口,实现 DataSource 接口的 getConnect 方法做动态处理

在这里插入图片描述
参考:MyBatis Plus 插件 动态数据源实现原理与源码讲解 (dynamic-datasource-spring-boot-starter-master)

3.DynamicDataSource使用

3.1 导入依赖

  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
      <version>3.6.1</version>
  </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2 application.yml多数据源配置

spring:
  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test_master
          username: root
          password: root
        slave_1:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test_slave
          username: root
          password: root

mybatis:
  type-aliases-package: com.rql.entity
  mapper-locations: classpath:mybatis/*.xml


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.测试

直接使用注解的形式@DS("数据源名称")


@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserDao userDao;

    @GetMapping("/a")
    @DS("slave_1")
    public List<User> findAll(){

        return userDao.findAll();
    }

    @PostMapping("/b")
    @DS("master")
    public void inserUser(@RequestBody User user){
        userDao.inserUser(user);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/469722
推荐阅读
相关标签
  

闽ICP备14008679号