Skip to content

多数据源切换

依赖说明

主工程使用 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() 等官方支持方式。
  • 具体截图与菜单以部署环境为准;排错请结合控制台数据源初始化日志与官方文档「切换数据源失败」章节。

Released under the MIT License.