# dynamic-datasource **Repository Path**: baomidou/dynamic-datasource-spring-boot-starter ## Basic Information - **Project Name**: dynamic-datasource - **Description**: 基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://doc.xiuceyun.cn - **GVP Project**: No ## Statistics - **Stars**: 4396 - **Forks**: 589 - **Created**: 2018-04-26 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: spring-boot-ext **Tags**: 多数据源, 动态数据源 ## README
Spring Boot 多数据源快速集成启动器 —— 一个注解完成切换。
读写分离 · 一主多从 · 异构多库 · 动态路由 · 分布式与本地多数据源事务
English · 简体中文
--- ## 目录 - [为什么选择它](#为什么选择它) - [核心特性](#核心特性) - [版本兼容](#版本兼容) - [快速开始](#快速开始) - [命名约定与切换规则](#命名约定与切换规则) - [事务支持](#事务支持) - [动态数据源 key](#动态数据源-key) - [运行时管理能力](#运行时管理能力) - [生态集成](#生态集成) - [模块划分](#模块划分) - [文档](#文档) - [贡献与安全](#贡献与安全) --- ## 为什么选择它 给一个 Spring Boot 应用接入第二个数据库,通常意味着:手写第二个 `DataSource` Bean、第二个事务 管理器、第二套 MyBatis/JPA 装配,而且仍然不知道该怎么让某一次调用走到指定的库上。 **dynamic-datasource** 把这一切收敛成一个 starter:在 YAML 里声明数据源,在类或方法上标注 `@DS("slave")`,框架在方法调用时解析连接、调用结束后自动恢复,并且支持跨服务层的多层嵌套。 项目自 2018 年维护至今,同时面向三代 Spring Boot 发布产物,CI 在 JDK 17/21/25/27 矩阵(Boot 2 线通过 JDK 8 toolchain 编译与测试)以及 GraalVM Native Image 上持续验证。 > 它只做一件事——**决定一次调用打到哪个 `DataSource` 上**——并且刻意不限制你随后做什么。任意 CRUD、 > 任意 ORM、任意事务策略。 > 完整文档(所有配置项、连接池适配与集成方案)在 [秀策云文档站](https://doc.xiuceyun.cn), > 后续会逐页迁入 [Wiki](https://github.com/baomidou/dynamic-datasource/wiki),详见[文档](#文档)。 ## 核心特性 | 维度 | 能力 | | --- | --- | | **数据源分组** | 纯粹多库、读写分离、一主多从、混合模式,全靠命名即可表达。 | | **动态路由** | `@DS` 可标注在方法/类/接口/抽象类上,就近生效;组名走负载均衡或随机策略。 | | **事务支持** | `@DSTransactional` 本地多数据源事务(7 种传播行为),Seata `AT` / `XA` 与 Atomikos XA 分布式事务。 | | **配置加密** | 内置 `ENC(...)` 敏感信息加密,算法与公钥可自定义;SpEL 类型访问默认关闭。 | | **生命周期** | 支持无数据源启动、懒加载、运行期动态增删数据源、优雅关闭(等待活跃连接)。 | | **可扩展** | 自定义注解(以 `@DS` 作为元注解)、自定义 `DsProcessor` 责任链、自定义 `DataSourceProvider`、可插拔 `DataSourceCreator`。 | | **连接池** | Druid、HikariCP、BeeCP、DBCP2、C3P0、Oracle UCP、无池 basic 与 JNDI 的便捷集成。 | | **原生镜像** | GraalVM Reachability Metadata 作为独立构件发布,`nativeTest` 是每次提交的准入门禁。 | ## 版本兼容 按你的 Spring Boot 版本选择对应的 starter(各产线的维护状态见 [SUPPORT.md](./SUPPORT.md)): | Spring Boot | JDK 要求 | Starter 构件 | 项目开始支持版本 | | :---: | :---: | :--- | :---: | | 1.5.x ~ 2.x.x | JDK 8+ | `dynamic-datasource-spring-boot-starter` | 1.0.0 | | 3.x.x | JDK 17+ | `dynamic-datasource-spring-boot3-starter` | 4.0.0 | | 4.x.x | JDK 17+ | `dynamic-datasource-spring-boot4-starter` | 4.5.0 | > 连接池(Druid / HikariCP 等)与 JDBC 驱动 **不包含** 在本 starter 中,需项目自行引入并保持版本 > 匹配——这正是为了保证构件轻量,避免 shaded 式打包带来的依赖冲突。 ## 快速开始 **1 · 引入依赖**(下例为 `4.5.0`,请替换为 [最新 released 版本](https://github.com/baomidou/dynamic-datasource/releases))。