MyBatis Plus 动态数据源注解 @DS 注解
所属分类 mybatis-plus
浏览量 22
在多个数据库之间动态切换的场景(如读写分离、多租户等)
com.baomidou
mybatis-plus-boot-starter
3.5.3.1
com.baomidou
dynamic-datasource-spring-boot-starter
3.5.3.1
spring:
datasource:
dynamic:
primary: master # 默认数据源
datasource:
master:
url: jdbc:mysql://localhost:3306/master_db?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
slave1:
url: jdbc:mysql://localhost:3306/slave1_db?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
slave2:
url: jdbc:mysql://localhost:3306/slave2_db?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
import com.baomidou.dynamic.datasource.DynamicDataSource;
import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot3.DataSourceProperty;
import com.baomidou.dynamic.datasource.spring.boot3.YamlDynamicDataSourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
@Configuration
public class DynamicDataSourceConfig {
@Bean
public DynamicDataSource dynamicDataSource(YamlDynamicDataSourceFactory factory) {
Map< String, DataSourceProperty> dataSourceMap = factory.createDataSourceMap();
return new DynamicDataSource(dataSourceMap);
}
}
在 Service 层或 Mapper 层使用 @DS 注解指定数据源
import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@DS("master") // 使用 master 数据源
public void saveUser(User user) {
// 保存到 master 数据库
}
@DS("slave1") // 使用 slave1 数据源
public User getUserById(Long id) {
// 从 slave1 数据库查询
return null;
}
}
读写分离配置(可选)
spring:
datasource:
dynamic:
write-strategy: round_robin # 写操作策略(默认为 master)
read-strategy: round_robin # 读操作策略(轮询)
注意事项
@DS 注解优先级:
方法上的注解 > 类上的注解 > 全局默认数据源(primary)
事务管理:
如果需要跨数据源事务,需使用 @Transactional 并配置分布式事务(如 Seata)
数据源名称:
确保 @DS("xxx") 中的名称与 application.yml 中配置的名称一致
上一篇
下一篇
springboot自定义日志注解
词向量 Word Embedding
spring事务的一些知识点
MyBatis Plus @DS注解原理
多个AOP切面注解 执行顺序说明