我有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
我在本地计算机的Gradle插件中使用IntelliJ并使用bootRun运行我的应用程序。我将使用在运行Tomcat的所有其他环境上部署相同的应用程序war文件。
我尝试过添加:
- spring.profiles.active =本地
到脚本参数下的运行配置。
我尝试过添加
-Dspring.profiles.active =本地
到VM选项下的运行配置。
都没有工作。我一直看到启动时的INFO消息说:没有活动的配置文件集,回退到默认配置文件:默认
如果我使用
从Windows命令行运行我的应用程序gradle bootRun
但我首先设置了环境变量
set SPRING_PROFILES_ACTIVE=local
然后一切正常。
所以我的问题是,从IntelliJ运行bootRun时如何激活本地弹簧启动配置文件?
答案 0 :(得分:100)
我进入了编辑配置......
我将>head(Data)
Date Value
6/4/2017 180
6/4/2017 300
6/4/2017 120
6/4/2017 340
6/5/2017 300
添加到VM选项,然后重新运行该配置。它运作得很好。
答案 1 :(得分:62)
答案 2 :(得分:6)
我最后将以下内容添加到build.gradle:
bootRun {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}
test {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}
所以现在从IntelliJ运行bootRun时,它默认为" local"轮廓。
在我们的其他环境中,我们只需设置' SPRING_PROFILES_ACTIVE' Tomcat中的环境变量。
我从这里的评论中得到了这个:https://github.com/spring-projects/spring-boot/pull/592
答案 3 :(得分:5)
可能的原因可能是您没有将命令行参数传递给应用程序main方法。几个星期前我犯了同样的错误。
public static final void main(String... args) {
SpringApplication.run(Application.class, args);
}
答案 4 :(得分:2)
我使用Intellij社区版。 转到“运行/调试配置”>“运行器”选项卡>“环境变量”>单击按钮“ ...”。加: SPRING_PROFILES_ACTIVE =本地
答案 5 :(得分:2)
答案 6 :(得分:2)
在我的情况下,我在IntelliJ
的VM选项中使用了以下配置,它没有选择本地配置,但是在重新启动IntelliJ
之后,它从IntelliJ
选择了配置详细信息并启动了服务运行。
-Dspring.profiles.active=local
答案 7 :(得分:1)
Spring Boot似乎已随着其发展而改变了读取VM选项的方式。当您在Intellij中启动应用程序并希望激活某些配置文件时,可以尝试以下方法:
在“运行”中打开“编辑配置”,然后在“ VM选项”中添加:-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
或
java -jar -Dspring.profiles.active=dev XXX.jar
(请参见此处:how to use Spring Boot profiles)
在某处提到,如果您指定一些JVM选项,Spring会更改启动应用程序进程的方式。它分叉另一个进程,并且不会传递收到的arg,因此这不起作用。将args传递给它的唯一方法是:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
再次,这是给Maven的。 https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
第二个项目对我有用的是设置环境变量,如上面的一些回答所述:“编辑配置”-“环境变量”,以及:
spring.profiles.active=local
答案 8 :(得分:0)
试试这个。编辑build.gradle文件,如下所示。
ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }
答案 9 :(得分:0)
对于Spring Boot 2.1.0及更高版本,您可以使用
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
答案 10 :(得分:0)
答案 11 :(得分:0)
因此恢复...
如果您拥有IntelliJ Ultimate,则正确答案是Daniel Bubenheim
提供的答案。但是,如果不这样做,请在“运行”->“编辑配置”中创建,然后在“配置”选项卡中添加下一个环境变量:
SPRING_PROFILES_ACTIVE=profilename
要执行jar,请执行以下操作:
java -jar -Dspring.profiles.active=profilename XXX.jar
答案 12 :(得分:-1)
在程序参数下设置-Dspring.profiles.active=local
。