跳到主要内容

Spring Boot 多数据源框架 · Apache-2.0 · 始于 2018

dynamic-datasource

一行 @DS 注解切换数据源 · 本地多库事务 · 动态增删数据源 · 读写分离

一次请求,如何落到正确的库?

连接进入后,@DS 解析出目标库或组名,动态路由把语句交给对应的数据源执行,再把结果原路返回 —— 业务代码里看不到任何路由逻辑。

实时路由示意
dynamic-datasource 请求路由示意Spring Boot 应用Service 方法动态路由RoutingDataSource@DS("master")
🔀

一行注解切换数据源

Service 方法上标注 @DS("slave") 即路由到目标库或组;支持 SpEL 动态 key、无注解方案与读写分离插件。

🧩

连接池无侵入集成

原生适配 Druid / HikariCP / BeeCP / DBCP2 / JNDI,全局与单库两级配置,创建即接管。

🧾

本地多库事务

@DSTransactional 在一个事务中绑定多个库的连接统一提交/回滚;另提供 Seata AT/XA 与 Atomikos 集成方案。

🧵

动态数据源管理

运行时增删数据源、懒启动、无数据源启动、数据源清单来自引导库,多租户场景的基石。

30 秒上手

引入 starter、配置多个库、在 Service 上标注解 —— 完成。

1. 配置数据源(第一个 _ 之前是组名)

spring:
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://host1:3306/db
username: root
password: ENC(...)
slave_1:
url: jdbc:mysql://host2:3306/db
username: root
password: ENC(...)

2. 用 @DS 切换

@Service
public class UserServiceImpl implements UserService {

@DS("master")
public void save(User user) {
// 走主库
}

@DS("slave") // slave_1 / slave_2 组内负载均衡
public List<User> listUsers() {
// 走从库组
}
}

依赖坐标(按 Spring Boot 版本三选一)及完整配置说明见 基础必读

AI 时代:把本站知识装进你的 AI 助手

本仓库提供开放格式的 Agent Skill。安装后,AI 编程助手在你的项目里可直接回答「为什么数据源切换失败」等常见问题——安装、配置、排障全链路。

npx skills add baomidou/dynamic-datasource
🤖

遇到问题了?

「@DS 不生效」「启动报错」「事务内不切换」等历史高频问题,已整理成排查清单。