MyBatisPlus多数据源配置
一,引言
在我们实际业务开发中,有时需要同时涉及多个数据库,可能一个 API中所需要的数据,往往是包含了多个数据库中的数据,这个时候我们就需要在项目运行中,切换数据源。
二,具体实现
步骤一:我们先需要引入maven配置,版本可自选。dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。 com.baomidou dynamic-datasource-spring-boot-starter XXX
步骤二:多数据源配置,需要注意的后面都有写注释。 spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源. datasource: master: url: jdbc:mysql://xx.xx.xx.xx:3306/xxx username: root password: xxx driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 slave_1: url: jdbc:mysql://xx.xx.xx.xx:3307/xxx username: root password: xxx driver-class-name: com.mysql.jdbc.Driver slave_2: url: ENC(xxxxx) # 内置加密,使用请查看详细文档 username: ENC(xxxxx) password: ENC(xxxxx) driver-class-name: com.mysql.jdbc.Driver schema: db/schema.sql # 配置则生效,自动初始化表结构 data: db/data.sql # 配置则生效,自动初始化数据 continue-on-error: true # 默认true,初始化失败是否继续 separator: ";" # sql默认分号分隔符
步骤三:步骤三就可以直接使用啦,真的是太方便了, @DS 可以注解在方法上或类上, 同时存在就近原则 方法上注解 优先于 类上注解 。 /** * 数据源切换测试 */ @Service @AllArgsConstructor public class TestJdbcServiceImpl implements TestJdbcService { // 数据库1的mapper private final KkOrderMapper kkOrderMapper; // 数据库2的mapper private final SysUserMapper sysUserMapper; // 不写DS默认是主数据源 @Override public void testMySql1() { List kkOrders = kkOrderMapper.selectList(null); System.out.println(kkOrders.size()); } // 注解里面填写多数据源配置的名字 @DS("slave_1") @Override public void testMysql2() { List sysUsers = sysUserMapper.selectList(null); System.out.println(sysUsers.size()); } }
官方建议:
1,本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
2,配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
3,切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
4,默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
方法上的注解优先于类上注解。
5,强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。