基于环境的弹簧数据源

2022-09-03 06:44:32

我正在尝试将我的Spring Boot应用程序配置为在某些环境变量存在时使用特定的数据源。例如,如果存在环境变量,我想使用我的生产数据源;否则,我想使用我的本地数据源(相同类型)。MY_PROD_DATASOURCE

我在Spring参考中发现了一些东西,解释了如何在我的.具体来说,MySQL数据源可能如下所示:application.properties

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driverClassName=com.mysql.jdbc.Driver

但是,我不明白如何有条件地更改此文件中的数据源属性。有没有另一种方法可以做到这一点?


答案 1

在Spring Boot中,您可以:

  1. 从 jar 中外部化,并通过添加 path 作为启动参数为每个环境提供文件:application.properties

    java -jar your-app.jar --spring.config.location=/path/to/app.properties
    
  2. 使用弹簧型材。为每个配置文件创建,在每个配置文件中创建不同的数据源属性application-${profile}.properties

  3. 使用 Spring 配置文件,而不是 ,将您的属性放到可以使用约定为所有环境放置属性的位置,如下所示:application.propertiesapplication.yaml

    spring:
        profiles: development
    server:
        port: 9001
    
    ---
    
    spring:
        profiles: production
    server:
        port: 0
    
  4. 使用环境变量并设置 、 、 和 (可选) 。SPRING_DATASOURCE_URLSPRING_DATASOURCE_USERNAMESPRING_DATASOURCE_PASSWORDSPRING_DATASOURCE_DRIVER_CLASS_NAME

有关详细信息,请参阅有关如何根据环境和外部配置更改配置的 Spring Boot 参考部分。


答案 2

推荐