基于环境变量设置 Spring Boot 应用程序.属性

2022-09-04 20:37:13

我有一个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

application-someserver.properties:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://someserver:5432/myproddb
spring.datasource.username=produser
spring.datasource.password=productionpass

等等等等。

在我的每个环境中,我都有一个名为环境变量的环境变量,该变量设置为环境类型,例如或(文件名与环境名称完全匹配)。MYENVlocalsomeserverapplication-{env}.properties

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


答案 1

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

告诉 Spring Boot 从属性或环境变量中选择活动配置文件。执行此操作的一种方法是将以下内容添加到您的 :MYENVapplication.properties

spring.profiles.active=${MYENV}

这样,Spring Boot 将设置为环境变量的值。spring.profiles.activeMYENV

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

如果您不喜欢通过参数传递系统属性,则可以使用相应的环境变量。相应的环境变量是 。例如,如果将 设置为 ,则配置文件将被激活。如果你坚持使用环境变量,第一个解决方案就是要走的路。spring.profiles.active-DSPRING_PROFILES_ACTIVESPRING_PROFILES_ACTIVElocallocalMYENV


答案 2

如果要将该应用程序部署到某个容器(tomcat,weblogic等),则可以指定环境变量。例如,让我们指定环境变量,然后在应用程序.properties中设置属性application1.spring.profiles.active=someserverspring.profiles.active=${application1.spring.profiles.active}


推荐