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. 特性
数据源分组
:适用于多种场景,如读写分离、一主多从等。
敏感信息加密
:使用 ENC() 加密数据库配置信息。
独立初始化
:支持每个数据库独立初始化表布局和数据库。
自界说注解
:支持自界说注解,需继承 DS。
简化集成
:提供对 Druid、HikariCP 等毗连池的快速集成。
组件集成
:支持 Mybatis-Plus、Quartz 等组件的集成方案。
动态数据源
:支持项目启动后动态增长或移除数据源。
分布式事务
:提供基于 Seata 的分布式事务方案。
2. 约定
本框架专注于数据源切换,不限制详细操作。
配置文件中以下划线_ 分割的数据源首部为组名。
切换数据源可以是组名或详细数据源名。
默认数据源名为 master,可通过 spring.datasource.dynamic.primary 修改。
方法上的注解优先于类上的注解。
3. 使用方法
3.1 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
复制代码
3.2 配置数据源
spring:
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
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
复制代码
3.3 使用 @DS 切换数据源
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
@DS("slave_1")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age >10");
}
}
复制代码
更多使用教程请参考Dynamic-Datasource 官网
二、mybatis-mate
mybatis-mate 是一个 MyBatis-Plus 的付费企业组件,内置很多好用的高级特性,其中包罗多数据源扩展组件,提供了高效简单的多数据源支持。
1.特性
注解 @Sharding:支持通过注解切换数据源。
配置:支持灵活的数据源配置。
动态加载卸载:支持动态加载和卸载数据源。
多数据源事务:支持 JTA Atomikos 分布式事务。
2.使用方法
2.1 配置数据源
mybatis-mate:
sharding:
primary: mysql
datasource:
mysql:
- key: node1
...
- key: node2
cluster: slave
...
postgres:
- key: node1
...
复制代码
2.2 使用 @Sharding 切换数据源
@Mapper
@Sharding("mysql")
public interface UserMapper extends BaseMapper<User> {
@Sharding("postgres")
Long selectByUsername(String username);
}
复制代码
2.3 切换指定数据库节点
// 切换到 mysql 从库 node2 节点
ShardingKey.change("mysqlnode2");
复制代码
更多使用示例请参考
多数据源动态加载卸载:
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4