多环境与多数据源切换

目录

一、解决方向

(一) 多环境切换:

(二) 多数据源切换:

二、多环境

(一) 环境文件

(二) 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 中使用 <build> 标签下的 <filters> 来指定相应的配置文件,如 maven_dev.properties、maven_test.properties 和 maven_prod.properties。

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <filters>
                    <filter>maven_dev.properties</filter>
                </filters>
            </build>
        </profile>
        <profile>
            <id>test</id>
            <build>
                <filters>
                    <filter>maven_test.properties</filter>
                </filters>
            </build>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <filters>
                    <filter>maven_prod.properties</filter>
                </filters>
            </build>
        </profile>
    </profiles>

(三) maven打包

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

三、多数据源

(一) yml中指定多数据源

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

(二) JavaBean配置

  • 创建一个 DataSourceConfig 类,使用 @Configuration 注解标记。
  • 对于每个数据源,使用 @Bean 注解创建一个 DataSource 实例。
  • 使用 @ConfigurationProperties 注解并指定 prefix 来自动绑定配置文件中的属性。

@Configuration
public class DataSourceConfig {

    //默认数据源
    @Primary
    @Bean(name = "healthDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.health")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "iotDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.iot")
    public DataSource iotDataSource() {
        return DataSourceBuilder.create().build();
    }
}


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIE结弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值