如何用网站做淘宝客,做网站遇上麻烦客,关注公众号赚钱,网络营销推你提供的内容是关于 dynamic-datasource-spring-boot-starter 的详细介绍#xff0c;这是一个非常实用的 Spring Boot 多数据源动态切换组件#xff0c;适用于需要在单个应用中连接多个数据库并灵活切换数据源的场景。下面我为你梳理一下该组件的核心信息与使…你提供的内容是关于 dynamic-datasource-spring-boot-starter 的详细介绍这是一个非常实用的 Spring Boot 多数据源动态切换组件适用于需要在单个应用中连接多个数据库并灵活切换数据源的场景。下面我为你梳理一下该组件的核心信息与使用要点方便你快速理解与应用组件简介dynamic-datasource-spring-boot-starter 是一个基于 Spring Boot 的 多数据源动态切换启动器支持Spring Boot 1.5.x、2.x.x、3.x.xJDK 1.7⚠️ 注意JPA 用户不建议使用本组件因为 JPA 自带事务管理难以实现数据源的动态切换。
✅ 核心特性特性说明多数据源支持支持纯粹多库、读写分离、一主多从、混合模式等数据源分组可将多个数据源归为一组如读库组、写库组支持负载均衡敏感信息加密支持数据库密码等敏感配置加密如 ENC(...)可自定义加密策略懒加载 无数据源启动支持按需加载数据源应用启动时可以不加载所有数据源自定义数据源来源支持从数据库或其他方式动态加载数据源配置动态增删数据源支持运行时动态添加或移除数据源注解驱动切换通过 DS 注解可继承灵活指定数据源支持类/方法级别多数据源事务提供本地多数据源事务方案也支持集成 Seata 分布式事务支持多种连接池Druid推荐监控、HikariCP推荐性能、BeeCP、DBCP2、JNDI 等SpEL 动态参数解析支持基于 SpEL、Session、Header 等动态选择数据源可扩展多层嵌套切换支持 Service 层方法间多次数据源切换A → B → CMyBatis / MyBatis-Plus 友好提供与 MyBatis 及 MyBatis-Plus 的良好集成Quartz / ShardingSphere / P6Spy 等兼容提供对这些常用组件的集成方案
️ 使用方法1. 引入依赖Spring Boot 3.x 推荐
dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot3-starter/artifactIdversion4.2.0/version
/dependency如需使用 Druid 连接池可选
dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.18/version
/dependency
⚠️ 注意不要同时引入 HikariCP 和 Druid避免冲突。2. 配置数据源application.yml基础配置示例
spring:datasource:dynamic:primary: master # 默认数据源strict: false # 未找到数据源是否抛异常datasource:master:url: jdbc:mysql://localhost:3306/db_masterusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3307/db_slaveusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver连接池配置示例以 HikariCP 为例
spring:datasource:dynamic:datasource:master:hikari:maximum-pool-size: 20minimum-idle: 5connection-timeout: 30000Druid 配置示例
spring:datasource:dynamic:datasource:master:type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 5max-active: 20filters: stat,wall,log4jvalidation-query: SELECT 1
3. 使用 DS 注解切换数据源类级别 方法级别覆盖
Service
DS(slave) // 默认使用 slave 数据源
public class UserService {DS(master) // 此方法使用 master 数据源public User getMasterData() {// ...}public User getSlaveData() {// 使用类上配置的 slave 数据源}
}手动切换编程式
// 切换到 slave 数据源
DynamicDataSourceContextHolder.push(slave);try {// 执行操作如调用 Mapper/DAO
} finally {// 恢复默认数据源DynamicDataSourceContextHolder.poll();
}高级功能1. 动态数据源扩展你可以编程方式动态添加数据源比如从数据库加载配置后动态注册
Bean
public DataSource dynamicDataSource(DataSourceProperties properties) {DynamicRoutingDataSource dataSource new DynamicRoutingDataSource();dataSource.addDataSource(custom, createDataSource(jdbc:mysql://custom-db:3306/db));return dataSource;
}private DataSource createDataSource(String url) {DriverManagerDataSource ds new DriverManagerDataSource();ds.setUrl(url);ds.setUsername(root);ds.setPassword(123456);return ds;
}2. 监控HikariCP 监控推荐通过 Actuator 查看连接池状态
management:endpoints:web:exposure:include: health,metricsmetrics:tags:application: ${spring.application.name}访问指标
http://localhost:8080/actuator/metrics/hikaricp.connections.activeDruid 监控
spring:datasource:dynamic:datasource:master:druid:stat-view-servlet:enabled: trueurl-pattern: /druid/*allow: 127.0.0.1访问地址:8080/druid使用建议 最佳实践场景推荐方案高并发、追求性能使用 HikariCP配置合理的 maximum-pool-size如 20~50视机器配置而定需要 SQL 防火墙、加密、监控使用 Druid但注意配置复杂、启动慢读写分离可使用 DS 注解或配置多数据源组结合负载均衡策略分布式事务可集成 Seata或使用本地事务方案动态增删数据源使用提供的 API 动态注册/注销数据源适合多租户等场景
⚠️ 注意事项JPA 不推荐使用本组件因 JPA 自身事务管理机制与动态数据源切换存在冲突。不要同时使用 HikariCP 和 Druid否则易出现 NoClassDefFoundError 等问题。方法上的 DS 注解优先级高于类上。DS 注解支持继承但仅限于抽象类不支持接口继承。默认主数据源是 master可通过 spring.datasource.dynamic.primary 修改。总结dynamic-datasource-spring-boot-starter 是一个功能全面、扩展灵活、适用于生产环境的多数据源管理组件特别适合以下业务场景多租户系统每个租户独立库读写分离架构数据分片/多库并行需要动态切换数据源的微服务模块需要高度自定义数据源配置与管理的系统