🔥 终极指南:Dynamic-Datasource 让 SpringBoot 多数据源管理如丝般顺滑
Dynamic-Datasource 是一款专为 SpringBoot 设计的动态数据源管理神器,轻松实现多数据源切换、主从分离与读写分离,让分布式事务处理更简单!无论是新手还是资深开发者,都能快速上手这款开源工具,告别繁琐的数据源配置烦恼。
📚 项目核心架构揭秘
1. 目录结构一目了然
项目采用模块化设计,核心代码分布在以下关键目录:
-
数据源创建模块:
dynamic-datasource-creator/
包含多种连接池(Druid、HikariCP、C3P0 等)的实现类,如DruidDataSourceCreator.java和HikariDataSourceCreator.java,轻松适配不同数据库连接需求。 -
Spring 集成模块:
dynamic-datasource-spring/
核心类DynamicRoutingDataSource.java实现数据源动态路由,搭配@DS注解实现灵活切换,让多数据源管理像切换频道一样简单! -
自动配置模块:
dynamic-datasource-spring-boot-starter/
SpringBoot 自动配置入口,无需手动编写配置类,开箱即用的快乐谁懂?🎉
2. 核心功能模块速览
| 模块名称 | 功能描述 | 关键类/注解 |
|---|---|---|
| 动态数据源路由 | 实现数据源自动切换 | DynamicRoutingDataSource |
| 注解式切换 | 用注解指定数据源,优雅简洁 | @DS("master")、@Master |
| 主从分离支持 | 读写分离一键配置 | GroupDataSource |
| 分布式事务兼容 | 支持 Seata、Atomikos 等事务框架 | AtomikosTransactionFactory |
🚀 3 步极速上手 Dynamic-Datasource
1. 一键安装:Maven 依赖秒级集成
在 pom.xml 中添加以下依赖,SpringBoot 会自动完成配置:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
小贴士:如果使用 SpringBoot 3.x,请替换为
dynamic-datasource-spring-boot3-starter依赖哦!
2. 极简配置:3 分钟搞定多数据源
在 application.yml 中配置数据源,支持主从、多库等复杂场景:
spring:
datasource:
dynamic:
primary: master # 默认数据源
strict: false # 关闭严格模式,允许动态添加数据源
datasource:
master: # 主库(写操作)
url: jdbc:mysql://localhost:3306/master_db
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
slave_1: # 从库1(读操作)
url: jdbc:mysql://localhost:3307/slave_db1
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
slave_2: # 从库2(读操作)
url: jdbc:mysql://localhost:3308/slave_db2
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
3. 注解切换:一行代码搞定数据源路由
在 Service 方法上添加 @DS 注解,轻松指定数据源:
@Service
public class UserService {
// 默认使用主库(primary: master)
public void addUser(User user) { ... }
// 强制使用从库查询,实现读写分离
@DS("slave_1")
public List<User> listUsers() { ... }
}
⚡ 高级玩法:解锁 Dynamic-Datasource 隐藏技能
🎯 主从分离高级配置
通过分组数据源实现读写分离自动路由,无需手动指定从库:
spring:
datasource:
dynamic:
datasource:
master: # 主库(写)
url: jdbc:mysql://localhost:3306/master
...
slave_1: # 从库组(读)
url: jdbc:mysql://localhost:3307/slave1
...
slave_2: # 从库组(读)
url: jdbc:mysql://localhost:3308/slave2
...
strategy: # 负载均衡策略
type: load_balance # 轮询/随机切换从库
🛡️ 分布式事务无缝对接
集成 Seata 分布式事务,只需添加 @DSTransactional 注解:
@DSTransactional // 分布式事务注解
public void transferMoney() {
// 操作主库扣减金额
accountMapper.deduct();
// 操作从库记录日志
logMapper.insert();
}
📂 项目资源速查
- 官方文档:项目根目录
README.md - 示例代码:
dynamic-datasource-spring-boot-starter/src/test/java/ - 核心配置类:
DynamicDataSourceProperties.java(数据源配置属性)
💡 常见问题 Q&A
Q:如何动态添加数据源?
A:注入 DynamicRoutingDataSource 类,调用 addDataSource("new_ds", dataSource) 即可实时添加。
Q:支持哪些数据库连接池?
A:Druid、HikariCP、C3P0、DBCP2 等主流连接池全覆盖,配置示例见 dynamic-datasource-creator/ 目录。
🎉 总结
Dynamic-Datasource 凭借零侵入配置、注解式切换和强大的扩展性,成为 SpringBoot 多数据源管理的首选工具。无论是中小项目的主从分离,还是大型分布式系统的复杂数据源路由,它都能轻松胜任!现在就克隆项目体验吧:
git clone https://gitcode.com/gh_mirrors/dy/dynamic-datasource
提示:项目持续更新,记得关注
pom.xml中的最新版本哦!
让 Dynamic-Datasource 为你的项目插上多数据源的翅膀,从此告别数据源管理的烦恼,专注业务逻辑开发!🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



