• 多环境与多数据源切换


    目录

    一、解决方向

    (一) 多环境切换:

    (二) 多数据源切换:

    二、多环境

    (一) 环境文件

    (二) POM文件

    (三) maven打包

    三、多数据源

    (一) yml中指定多数据源

    (二) JavaBean配置


    经常遇到多环境切换和多数据源切换的事情,多数据源切换或多或少总是出些小问题。最下面有些代码,可能有助于避免或解决这些问题。

    一、解决方向

    (一) 多环境切换:

    • 统一配置:
      • 确保在不同环境下使用相同的配置项名称。这将减少配置文件之间的不一致性。
      • 使用 Spring 的 @Profile 注解,可以根据激活的 profile 加载相应的配置。
    • 外部化配置:
      • 将环境特定的配置信息外部化,例如使用环境变量、系统属性或配置中心。这样可以在不同环境中轻松切换配置。
    • 配置管理工具:
      • 使用配置管理工具(如Spring Cloud Config)来集中管理配置文件,可以动态更新配置,而无需重新部署应用。

    (二) 多数据源切换:

    • 使用注解驱动的切换:
      • 使用 Spring 的 @Primary 注解和 @Qualifier 注解,确保默认的数据源以及其他数据源能够被正确注入。
      • 使用 @ConditionalOnProperty 注解来根据配置文件中的属性条件性地创建数据源。
    • 事务管理:
      • 当使用多个数据源时,确保事务管理正确配置。可以使用 @Transactional 注解明确指定事务管理器。
    • 连接池设置:
      • 对于每个数据源,根据实际需求配置连接池参数,如最大连接数、最小空闲连接数等。
      • 确保不同数据源使用不同的连接池,以避免相互影响。
    • 测试和监控:
      • 编写单元测试来确保在切换数据源时不会出现问题。        
      • 使用监控工具来跟踪和调试数据源的性能和连接情况。
    • 版本兼容性:
      • 确保使用的数据库驱动程序与连接池库版本兼容。不同的库版本可能会有不同的特性和行为。
    • 文档和注释:
      • 给你的代码添加足够的文档和注释,特别是在涉及多环境和多数据源的地方,以便后续维护和团队合作。

    二、多环境

    (一) 环境文件

    • 你可以为每个环境创建一个独立的配置文件yml或者properties,
    • 比如 application-dev.properties、application-test.properties 和 application-prod.properties。这些文件可以共享相同的路径,在不同的文件中进行配置
      • 可以在application中引用相同路径,使用不同文件中配置,切换环境

    (二) POM文件

    • POM 文件中指定方式:
    • 使用 Maven 的 profile 来指定环境。
    • 在 pom.xml 文件中,你已经定义了三个 profile,分别是 dev、test 和 prod。
    • 默认情况下,dev 是激活的。
    • 每个 profile 中使用 标签下的 来指定相应的配置文件,如 maven_dev.properties、maven_test.properties 和 maven_prod.properties。
    1. <profiles>
    2. <profile>
    3. <id>dev</id>
    4. <activation>
    5. <activeByDefault>true</activeByDefault>
    6. </activation>
    7. <build>
    8. <filters>
    9. <filter>maven_dev.properties</filter>
    10. </filters>
    11. </build>
    12. </profile>
    13. <profile>
    14. <id>test</id>
    15. <build>
    16. <filters>
    17. <filter>maven_test.properties</filter>
    18. </filters>
    19. </build>
    20. </profile>
    21. <profile>
    22. <id>prod</id>
    23. <build>
    24. <filters>
    25. <filter>maven_prod.properties</filter>
    26. </filters>
    27. </build>
    28. </profile>
    29. </profiles>

    (三) maven打包

    • 使用 Maven 命令时,可以通过 -P 参数来选择激活的 profile,例如 mvn package -P prod。
    • 这将激活 prod profile,使用相应的配置文件进行打包。

    三、多数据源

    (一) yml中指定多数据源

    • 在 application.yml 文件中,使用 spring.datasource 下的配置项为每个数据源定义属性。
    • 为每个数据源指定 driver-class-name、jdbc-url、username 和 password。。
    1. spring:
    2. datasource:
    3. health:
    4. driver-class-name: com.mysql.jdbc.Driver
    5. jdbc-url: ${datasource.health.url}
    6. username: ${datasource.health.username}
    7. password: ${datasource.health.password}
    8. iot:
    9. driver-class-name: com.mysql.jdbc.Driver
    10. jdbc-url: ${datasource.iot.url}
    11. username: ${datasource.iot.username}
    12. password: ${datasource.iot.password}

    (二) JavaBean配置

    • 创建一个 DataSourceConfig 类,使用 @Configuration 注解标记。
    • 对于每个数据源,使用 @Bean 注解创建一个 DataSource 实例。
    • 使用 @ConfigurationProperties 注解并指定 prefix 来自动绑定配置文件中的属性。
    1. @Configuration
    2. public class DataSourceConfig {
    3. //默认数据源
    4. @Primary
    5. @Bean(name = "healthDataSource")
    6. @ConfigurationProperties(prefix = "spring.datasource.health")
    7. public DataSource dataSource() {
    8. return DataSourceBuilder.create().build();
    9. }
    10. @Bean(name = "iotDataSource")
    11. @ConfigurationProperties(prefix = "spring.datasource.iot")
    12. public DataSource iotDataSource() {
    13. return DataSourceBuilder.create().build();
    14. }
    15. }


    这样,就能够根据不同的环境和数据源配置灵活运行。确保你的配置文件和代码中的属性与实际的数据库连接信息匹配。

  • 相关阅读:
    【计算机网络】计算机学习笔记
    C++ Reference: Standard C++ Library reference: Containers: deque: deque: empty
    机器学习笔记 - 时间序列的季节性
    由iframe引起的无法返回上一页的问题
    被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了
    PHP有关JWT(Json Web Token)的那些事
    NVIDIA TX2 与 维特 IMU CAN通信
    JS 流行框架(八):ScrollReveal
    源码中的设计模式--模板方法模式
    战略篇-EMC三板斧
  • 原文地址:https://blog.csdn.net/m0_62091368/article/details/133771321