多数据源
适用:一般工作时候会有多个数据库,每个库对应不同的业务数据。程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢。
官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)【本文章使用的mybatisplus版本为3.5.2】
约定
- 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
- 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
- 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
- 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
- 方法上的注解优先于类上注解。
- DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
使用
1、导入依赖- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
- <version>3.5.1</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.2</version>
- </dependency>
复制代码 2、yaml 配置不同的数据源- spring:
- datasource:
- dynamic:
- primary: master #设置默认的数据源或者数据源组,默认值即为master
- strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
- datasource:
- master:
- url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
- username: root
- password: 123456
- driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
- slave_1:
- url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
- username: root
- password: 123456
- 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
- #......省略
- #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2
复制代码 注:多数据源配置规范- # 多主多从 纯粹多库(记得设置primary) 混合配置
- spring: spring: spring:
- datasource: datasource: datasource:
- dynamic: dynamic: dynamic:
- datasource: datasource: datasource:
- master_1: mysql: master:
- master_2: oracle: slave_1:
- slave_1: sqlserver: slave_2:
- slave_2: postgresql: oracle_1:
- slave_3: h2: oracle_2:
复制代码 3、使用 @DS 切换数据源。
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。- @Service
- @DS("slave")
- public class UserServiceImpl implements UserService {
- @Autowired
- private JdbcTemplate jdbcTemplate;
- public List selectAll() {
- return jdbcTemplate.queryForList("select * from user");
- }
-
- @Override
- @DS("slave_1")
- public List selectByCondition() {
- return jdbcTemplate.queryForList("select * from user where age >10");
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |