基于环境的Spring数据源

时间:2014-12-01 17:08:39

标签: java database spring spring-boot

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

我发现something in the Spring reference解释了如何在我的application.properties中声明单个数据源。具体来说,MySQL数据源可能如下所示:

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

但是,我没有看到如何在此文件中有条件地更改数据源属性。还有其他办法吗?

1 个答案:

答案 0 :(得分:13)

在Spring Boot中你可以:

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

    java -jar your-app.jar --spring.config.location=/path/to/app.properties
    
  2. 使用Spring配置文件。在每个不同的数据源属性

  3. 中为每个配置文件创建application-${profile}.properties
  4. 使用Spring配置文件而不是application.properties,将您的属性设置为application.yaml,您可以使用约定为所有环境添加属性,如下所示:

    spring:
        profiles: development
    server:
        port: 9001
    
    ---
    
    spring:
        profiles: production
    server:
        port: 0
    
  5. 使用环境变量并设置SPRING_DATASOURCE_URLSPRING_DATASOURCE_USERNAMESPRING_DATASOURCE_PASSWORD和(可选)SPRING_DATASOURCE_DRIVER_CLASS_NAME

  6. How to change configuration depending on the environmentExternal Configuration上的Spring Boot参考部分了解详情。