传递给bootRun的环境VM arg没有被Spring Boot应用程序接收

时间:2017-07-31 19:38:00

标签: spring spring-boot jvm

我正在尝试在运行时设置我的Spring Boot(1.5.4.RELEASE)应用程序的环境,但看起来我有一些不协调的东西。

我的application.yml定义如下:

spring:
  profiles.active: ${env:local}
---
spring:
  profiles: local
  foo: bar
---
spring:
  profiles: dev
  foo: bar

在我注释为@Configuration的类中,我有一个方法可以执行以下操作,因此我可以显示正在使用的环境:

@Value('${spring.profiles.active}')
String activeProfile

@PostConstruct
def bootComplete() {
    println "App started with profile: $activeProfile"
}

在这种配置下,当我的应用程序启动时,我在控制台中看到了这一点:

App started with profile: local

如果我在application.yml中将 $ {env:local} 修改为 $ {env:dev} ,我启动应用程序,我会在控制台:

App started with profile: dev

我的目标是使用VM参数启动应用程序,以便在运行时设置活动配置文件。我正在添加参数: -Denv = dev 但似乎它对应用程序的启动没有影响。任何人都可以建议我在这里可以忽略的东西吗?

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。问题是我正在使用Gradle bootRun启动应用程序。我的假设是那里设置的VM args会被使用。我现在通过直接调用该类来运行应用程序,并且VM args正在运行(-Denv和-Dspring.profiles.active)

答案 1 :(得分:0)

执行-Denv=env不会产生任何影响,因为env不是属性键。 这就是你如何做到的:

-Dspring.profiles.active=dev