多数据源切换
依赖说明
主工程使用 dynamic-datasource-spring-boot-starter(版本以根 pom.xml / mms-datasource 模块为准),与 Spring Boot 3.x、JDK 21 对齐。官方文档: dynamic-datasource
简介
- 在 Spring Boot 中快速集成多数据源,支持分组、读写分离、懒加载等(详见官方文档)。
- JPA 与多数据源、事务切换组合使用时需自行评估,常见问题参见官方「切换数据源失败」说明。
切换数据源(@DS)
在 Service 实现类 的方法或类上使用 @DS("数据源名称或组名") 切换;未标注时使用默认主库。
java
// 以当前工程依赖为准,一般为 dynamic-datasource 提供的 @DS
import com.baomidou.dynamic.datasource.annotation.DS;
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Override
public List<User> listMain() {
// 使用类上 @DS("slave")
return baseMapper.selectList(null);
}
@DS("slave_1")
@Override
public List<User> listBranch() {
return baseMapper.selectList(null);
}
}实践建议(与 AOP 一致)
@DS基于 AOP,内部this自调用、未走代理的调用可能导致切换不生效;建议与@Transactional一样,优先写在 对外可调用的 Service 方法 上。- 若表与库固定对应,也可在 Mapper 接口类 上使用
@DS(建议仅类级,避免混乱)。
配置与排错
- 数据源 URL、用户名密码等在
spring.datasource.dynamic(或项目统一约定节点)配置;敏感信息可使用ENC()等官方支持方式。 - 具体截图与菜单以部署环境为准;排错请结合控制台数据源初始化日志与官方文档「切换数据源失败」章节。
