MybatisPlus——实现多数据源操作

打印 上一主题 下一主题

主题 901|帖子 901|积分 2703

多数据源

适用:一般工作时候会有多个数据库,每个库对应不同的业务数据。程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢。
官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)【本文章使用的mybatisplus版本为3.5.2】
约定


  • 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
  • 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
  • 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
  • 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
  • 方法上的注解优先于类上注解。
  • DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
使用

1、导入依赖
  1. <dependency>
  2.     <groupId>com.baomidou</groupId>
  3.     <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  4.     <version>3.5.1</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>com.baomidou</groupId>
  8.     <artifactId>mybatis-plus-boot-starter</artifactId>
  9.     <version>3.5.2</version>
  10. </dependency>
复制代码
2、yaml 配置不同的数据源
  1. spring:
  2.   datasource:
  3.     dynamic:
  4.       primary: master #设置默认的数据源或者数据源组,默认值即为master
  5.       strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
  6.       datasource:
  7.         master:
  8.           url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
  9.           username: root
  10.           password: 123456
  11.           driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
  12.         slave_1:
  13.           url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
  14.           username: root
  15.           password: 123456
  16.           driver-class-name: com.mysql.jdbc.Driver
  17.         slave_2:
  18.           url: ENC(xxxxx) # 内置加密,使用请查看详细文档
  19.           username: ENC(xxxxx)
  20.           password: ENC(xxxxx)
  21.           driver-class-name: com.mysql.jdbc.Driver
  22.        #......省略
  23.        #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2
复制代码
注:多数据源配置规范
  1. # 多主多从                      纯粹多库(记得设置primary)                   混合配置
  2. spring:                               spring:                               spring:
  3.   datasource:                           datasource:                           datasource:
  4.     dynamic:                              dynamic:                              dynamic:
  5.       datasource:                           datasource:                           datasource:
  6.         master_1:                             mysql:                                master:
  7.         master_2:                             oracle:                               slave_1:
  8.         slave_1:                              sqlserver:                            slave_2:
  9.         slave_2:                              postgresql:                           oracle_1:
  10.         slave_3:                              h2:                                   oracle_2:
复制代码
3、使用 @DS 切换数据源。
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解
  1. @Service
  2. @DS("slave")
  3. public class UserServiceImpl implements UserService {
  4.   @Autowired
  5.   private JdbcTemplate jdbcTemplate;
  6.   public List selectAll() {
  7.     return  jdbcTemplate.queryForList("select * from user");
  8.   }
  9.   
  10.   @Override
  11.   @DS("slave_1")
  12.   public List selectByCondition() {
  13.     return  jdbcTemplate.queryForList("select * from user where age >10");
  14.   }
  15. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表