Dynamic-Datasource终极YAML配置指南:多环境支持完全教程
Dynamic-Datasource终极YAML配置指南多环境支持完全教程【免费下载链接】dynamic-datasourcedynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasourceDynamic-Datasource是SpringBoot生态中功能最强大的动态数据源管理框架专为处理多数据源、主从分离、读写分离等复杂数据库场景而生。无论你是需要连接多个数据库还是实现高性能的读写分离架构Dynamic-Datasource都能提供简洁优雅的解决方案。本文将为你提供完整的YAML配置指南涵盖从基础配置到高级特性的所有内容。 为什么选择Dynamic-Datasource在微服务架构盛行的今天数据库连接管理变得日益复杂。Dynamic-Datasource解决了以下核心痛点多数据源管理轻松管理多个数据库连接主从分离自动路由读写操作到不同数据库动态切换运行时动态增减数据源事务支持完整的本地和分布式事务方案多种连接池支持Druid、HikariCP、BeeCp等主流连接池 基础YAML配置详解核心配置结构Dynamic-Datasource的配置以spring.datasource.dynamic为前缀以下是完整的配置结构spring: datasource: dynamic: # 启用动态数据源默认true enabled: true # 设置默认的数据源或数据源组默认值为master primary: master # 严格模式默认false。true时未匹配到指定数据源抛异常false时使用默认数据源 strict: false # 是否优雅关闭数据源默认为false grace-destroy: false # 是否懒加载数据源 lazy: false # 是否启用seata分布式事务 seata: false # 是否使用p6spy输出SQL日志 p6spy: false # 数据源配置 datasource: master: url: jdbc:mysql://localhost:3306/master_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver slave_1: url: jdbc:mysql://localhost:3307/slave_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver数据源命名规范Dynamic-Datasource采用智能的命名约定下划线分组以下划线_分割的数据源首部即为组名负载均衡相同组名的数据源会自动形成负载均衡组灵活切换可以按组名切换负载均衡或按具体数据源名切换 多环境配置策略开发环境配置# application-dev.yml spring: datasource: dynamic: primary: master datasource: master: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_password driver-class-name: com.mysql.cj.jdbc.Driver slave: url: jdbc:mysql://localhost:3307/dev_slave username: dev_user password: dev_password driver-class-name: com.mysql.cj.jdbc.Driver测试环境配置# application-test.yml spring: datasource: dynamic: primary: master datasource: master: url: jdbc:mysql://test-db:3306/test_db username: test_user password: ENC(AES加密密码) driver-class-name: com.mysql.cj.jdbc.Driver slave_1: url: jdbc:mysql://test-slave-1:3307/test_db username: test_user password: ENC(AES加密密码) driver-class-name: com.mysql.cj.jdbc.Driver slave_2: url: jdbc:mysql://test-slave-2:3308/test_db username: test_user password: ENC(AES加密密码) driver-class-name: com.mysql.cj.jdbc.Driver生产环境配置# application-prod.yml spring: datasource: dynamic: primary: master strict: true # 生产环境开启严格模式 datasource: master: url: jdbc:mysql://prod-master:3306/prod_db?useSSLtrueserverTimezoneUTC username: prod_user password: ENC(强加密密码) driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 slave_1: url: jdbc:mysql://prod-slave-1:3307/prod_db?useSSLtrueserverTimezoneUTC username: prod_user password: ENC(强加密密码) driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 15 minimum-idle: 3️ 高级配置模式1. 多主多从架构spring: datasource: dynamic: datasource: # 主库组 master_1: url: jdbc:mysql://master1:3306/db username: user password: pass master_2: url: jdbc:mysql://master2:3306/db username: user password: pass # 从库组 slave_1: url: jdbc:mysql://slave1:3307/db username: user password: pass slave_2: url: jdbc:mysql://slave2:3308/db username: user password: pass slave_3: url: jdbc:mysql://slave3:3309/db username: user password: pass2. 混合数据库类型spring: datasource: dynamic: datasource: mysql_db: url: jdbc:mysql://localhost:3306/mysql_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver postgres_db: url: jdbc:postgresql://localhost:5432/postgres_db username: postgres password: postgres123 driver-class-name: org.postgresql.Driver oracle_db: url: jdbc:oracle:thin:localhost:1521:orcl username: system password: oracle123 driver-class-name: oracle.jdbc.OracleDriver3. 连接池深度配置spring: datasource: dynamic: datasource: master: url: jdbc:mysql://localhost:3306/db username: root password: 123456 # Druid连接池配置 druid: initial-size: 5 min-idle: 5 max-active: 20 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 filters: stat,wall,log4j 代码中使用数据源注解方式切换数据源在服务类或方法上使用DS注解即可轻松切换数据源Service DS(slave) // 类级别注解默认使用slave组 public class UserServiceImpl implements UserService { Autowired private JdbcTemplate jdbcTemplate; // 使用slave组负载均衡 public ListUser findAll() { return jdbcTemplate.query(SELECT * FROM users, new BeanPropertyRowMapper(User.class)); } DS(master) // 方法级别注解优先级更高 public void saveUser(User user) { jdbcTemplate.update(INSERT INTO users(name, email) VALUES(?, ?), user.getName(), user.getEmail()); } DS(slave_1) // 指定具体数据源 public User findById(Long id) { return jdbcTemplate.queryForObject( SELECT * FROM users WHERE id ?, new Object[]{id}, new BeanPropertyRowMapper(User.class) ); } }SPEL动态数据源Dynamic-Datasource支持使用Spring Expression Language动态解析数据源Service public class TenantUserService { DS(#session.tenantName) // 从session中获取租户名 public ListUser getUsersByTenant() { // 自动切换到对应租户的数据源 return jdbcTemplate.query(SELECT * FROM users, new BeanPropertyRowMapper(User.class)); } DS(#header.tenantName) // 从HTTP Header中获取 public User getUserFromHeader(Long id) { return jdbcTemplate.queryForObject( SELECT * FROM users WHERE id ?, new Object[]{id}, new BeanPropertyRowMapper(User.class) ); } }️ 安全与加密配置敏感信息加密Dynamic-Datasource内置了数据库密码加密功能spring: datasource: dynamic: datasource: master: url: jdbc:mysql://localhost:3306/db username: ENC(AQAAABAAAAAQ4J7WqJ6wXj7H8KjLp4Q) # 加密用户名 password: ENC(AQAAABAAAAAQqwertyuiopasdfghjklzxcv) # 加密密码 driver-class-name: com.mysql.cj.jdbc.Driver自定义加密密钥spring: datasource: dynamic: public-key: your-custom-public-key-here # 自定义公钥 datasource: master: url: jdbc:mysql://localhost:3306/db username: ENC(加密内容) password: ENC(加密内容) 监控与健康检查连接池监控配置spring: datasource: dynamic: datasource: master: url: jdbc:mysql://localhost:3306/db username: root password: 123456 druid: # 监控配置 stat-view-servlet: enabled: true url-pattern: /druid/* login-username: admin login-password: admin web-stat-filter: enabled: true url-pattern: /* exclusions: *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* 常见问题与解决方案1. 数据源切换失败问题DS注解不生效始终使用默认数据源解决方案检查是否启用了spring.datasource.dynamic.enabledtrue确认数据源名称拼写正确检查是否在事务方法中事务方法需要特殊处理2. 连接池配置不生效问题自定义的连接池参数没有被应用解决方案确认连接池类型Druid、HikariCP等检查配置路径是否正确查看对应连接池的配置类如DruidConfig.java、HikariCpConfig.java3. 多环境配置冲突问题不同环境的配置互相干扰解决方案使用Spring Profiles隔离配置每个环境使用独立的配置文件通过spring.profiles.active指定激活的环境 最佳实践总结命名规范使用有意义的名称如order_master、user_slave_1环境隔离为每个环境创建独立的配置文件连接池优化根据业务量调整连接池参数监控配置生产环境务必开启连接池监控安全第一敏感信息使用加密存储测试覆盖为每个数据源编写单元测试通过本指南你应该已经掌握了Dynamic-Datasource的完整YAML配置方法。无论是简单的多数据源场景还是复杂的主从分离架构Dynamic-Datasource都能提供优雅的解决方案。开始你的多数据源之旅吧【免费下载链接】dynamic-datasourcedynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考