我有5个环境:
- local (my development machine)
- dev
- qc
- uat
- live
- staging
我想为每个环境使用不同的应用程序属性,因此我有以下属性文件,每个文件都有不同的数据源URL:
- application.properties (containing common properties)
- application-local.properties
- application-dev.properties
- application-qc.properties
- application-uat.properties
- application-live.properties
我正在使用IntelliJ并在我的本地机器上使用Gradle插件中的bootRun运行我的应用程序。我将使用在所有运行Tomcat的其他环境中部署相同的应用程序war文件。
我试着补充:
——spring.profiles.active =当地
到脚本参数下的运行配置。
我试着添加
-Dspring.profiles.active =当地
虚拟机选项下的“运行”配置。
既不工作。我在启动时一直看到INFO消息说:没有活动配置文件设置,回落到默认配置文件:默认
如果我运行我的应用程序从windows命令行使用
gradle bootRun
但我先设置环境变量
set SPRING_PROFILES_ACTIVE=local
然后一切正常。
所以我的问题是,当从IntelliJ运行bootRun时,我如何激活我的本地spring引导配置文件?
随着Spring Boot的发展,它似乎已经改变了读取VM选项的方式。这里有一些方法来尝试当你在Intellij中启动一个应用程序,并想要激活一些配置文件:
1. 修改虚拟机选项
在“运行”中打开“编辑配置”,在“虚拟机选项”中添加:-Dspring.profiles.active=local
它实际上适用于我的Spring Boot v2.0.3项目。RELEASE和Spring v5.0.7。RELEASE,但不是Spring Boot v2.1.1的另一个项目。RELEASE和Spring v5.1.3.RELEASE。
此外,当使用Maven或JAR运行时,人们会提到:
mvn spring-boot:run -Drun.profiles=dev
or
java -jar -Dspring.profiles.active=dev XXX.jar
(请看这里:如何使用Spring Boot配置文件)
2. 传递JVM参数
在某个地方提到,如果您指定一些JVM选项,Spring将改变启动应用程序进程的方式;它会分叉另一个进程,并且不会传递它接收到的参数,所以这不起作用。传递参数给它的唯一方法是:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
同样,这是针对Maven的。
https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
3.设置(应用程序)环境变量
对我来说,第二个项目的工作是设置环境变量,正如上面的一些回答所提到的:“编辑配置”-“环境变量”,以及:
SPRING_PROFILES_ACTIVE=local
我最终在build.gradle中添加了以下内容:
bootRun {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}
test {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}
所以现在当从IntelliJ运行bootRun时,它默认为“本地”配置文件。
在我们的其他环境中,我们将简单地在Tomcat中设置'SPRING_PROFILES_ACTIVE'环境变量。
我从这里的一个评论中得到了这个:https://github.com/spring-projects/spring-boot/pull/592