【第21章】MyBatis-Plus多数据源支持

打印 上一主题 下一主题

主题 816|帖子 816|积分 2448


前言

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

一、dynamic-datasource

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



  • 数据源分组:适用于多种场景,如读写分离、一主多从等。
  • 敏感信息加密:使用 ENC() 加密数据库配置信息。
  • 独立初始化:支持每个数据库独立初始化表布局和数据库。
  • 自界说注解:支持自界说注解,需继承 DS。
  • 简化集成:提供对 Druid、HikariCP 等毗连池的快速集成。
  • 组件集成:支持 Mybatis-Plus、Quartz 等组件的集成方案。
  • 动态数据源:支持项目启动后动态增长或移除数据源。
  • 分布式事务:提供基于 Seata 的分布式事务方案。
2. 约定



  • 本框架专注于数据源切换,不限制详细操作。
  • 配置文件中以下划线_ 分割的数据源首部为组名。
  • 切换数据源可以是组名或详细数据源名。
  • 默认数据源名为 master,可通过 spring.datasource.dynamic.primary 修改。
  • 方法上的注解优先于类上的注解。
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.特性



  • 注解 @Sharding:支持通过注解切换数据源。
  • 配置:支持灵活的数据源配置。
  • 动态加载卸载:支持动态加载和卸载数据源。
  • 多数据源事务:支持 JTA Atomikos 分布式事务。
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");
复制代码
更多使用示例请参考
多数据源动态加载卸载:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

梦见你的名字

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

标签云

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