根据环境变量设置Spring Boot application.properties

Tan*_*bey 12 java spring spring-boot

我有一个将在各种环境中运行的Spring Boot应用程序,并且根据它运行的环境,它将连接到不同的数据库.我有几个application.properties文件,每个环境对应一个文件:

application-local.properties:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=dbuser
spring.datasource.password=123456789
Run Code Online (Sandbox Code Playgroud)

application-someserver.properties:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://someserver:5432/myproddb
spring.datasource.username=produser
spring.datasource.password=productionpass
Run Code Online (Sandbox Code Playgroud)

等等

在我的每个环境中,我都有一个环境变量MYENV,例如,它被设置为环境类型,local或者someserver(application-{env}.properties文件的名称与环境名称完全匹配).

如何让spring boot读取这个环境变量并自动选择正确的.properties文件?我不想做整个-Dspring.profiles.active=someserver因为这个包的部署方式(它不会作为jar运行).

Ali*_*ani 15

如何让spring boot读取此环境变量并自动选择正确的.properties文件?

告诉Spring Boot 从属性或环境变量中选择Active ProfileMYENV.一种方法是将以下内容添加到您的application.properties:

spring.profiles.active=${MYENV}
Run Code Online (Sandbox Code Playgroud)

这样Spring Boot就会设置spring.profiles.activeMYENV环境变量的值.

我不必做整个-Dspring.profiles.active = someserver,因为这个包的部署方式(它不会作为jar运行)

spring.profiles.active如果您不想通过-D参数传递系统属性,则可以使用相应的环境变量.相应的环境变量是SPRING_PROFILES_ACTIVE.例如,如果设置SPRING_PROFILES_ACTIVElocal,local则将激活配置文件.如果您坚持使用MYENV环境变量,那么第一个解决方案就是可行的方法.

  • `spring.profiles.active = $ {MYENV:默认值}` (9认同)
  • 是否可以有一个“默认”配置,以便在 env 变量不匹配任何文件时选择一个标准? (2认同)