qidao123.com技术社区-IT企服评测·应用市场

标题: 【第21章】MyBatis-Plus多数据源支持 [打印本页]

作者: 梦见你的名字    时间: 2024-11-19 09:21
标题: 【第21章】MyBatis-Plus多数据源支持

前言

随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将先容两种 MyBatis-Plus 的多数据源扩展插件:开源生态的 dynamic-datasource 和 企业级生态的 mybatis-mate。

一、dynamic-datasource

dynamic-datasource 是一个开源的 Spring Boot 多数据源启动器,提供了丰富的功能,包罗数据源分组、敏感信息加密、独立初始化表布局等。
1. 特性


2. 约定


3. 使用方法

3.1 引入依赖

  1. <dependency>
  2.   <groupId>com.baomidou</groupId>
  3.   <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  4.   <version>${version}</version>
  5. </dependency>
复制代码
3.2 配置数据源

  1. spring:
  2.   datasource:
  3.     dynamic:
  4.       primary: master
  5.       strict: 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
  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
复制代码
3.3 使用 @DS 切换数据源

  1. @Service
  2. @DS("slave")
  3. public class UserServiceImpl implements UserService {
  4.   @Autowired
  5.   private JdbcTemplate jdbcTemplate;
  6.   @Override
  7.   @DS("slave_1")
  8.   public List selectByCondition() {
  9.     return jdbcTemplate.queryForList("select * from user where age >10");
  10.   }
  11. }
复制代码
更多使用教程请参考Dynamic-Datasource 官网
二、mybatis-mate

mybatis-mate 是一个 MyBatis-Plus 的付费企业组件,内置很多好用的高级特性,其中包罗多数据源扩展组件,提供了高效简单的多数据源支持。
1.特性


2.使用方法

2.1 配置数据源

  1. mybatis-mate:
  2.   sharding:
  3.     primary: mysql
  4.     datasource:
  5.       mysql:
  6.         - key: node1
  7.           ...
  8.         - key: node2
  9.           cluster: slave
  10.           ...
  11.       postgres:
  12.         - key: node1
  13.           ...
复制代码
2.2 使用 @Sharding 切换数据源

  1. @Mapper
  2. @Sharding("mysql")
  3. public interface UserMapper extends BaseMapper<User> {
  4.     @Sharding("postgres")
  5.     Long selectByUsername(String username);
  6. }
复制代码
2.3 切换指定数据库节点

  1. // 切换到 mysql 从库 node2 节点
  2. ShardingKey.change("mysqlnode2");
复制代码
更多使用示例请参考
多数据源动态加载卸载:




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4