从IntelliJ运行时如何激活Spring Boot配置文件?


133

我有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 =本地

到VM选项下的运行配置。

都不起作用。我一直在启动时看到INFO消息,说:未设置活动配置文件,回退到默认配置文件:默认

如果我使用以下命令从Windows命令行运行我的应用程序

gradle bootRun

但是我首先设置环境变量

set SPRING_PROFILES_ACTIVE=local

然后一切正常。

所以我的问题是,从IntelliJ运行bootRun时如何激活本地spring引导配置文件?


1
为什么要通过gradle在其中运行应用程序?使用运行配置会不会方便十倍?您可以在此处设置配置文件以启用...
Stephane Nicoll

如上所述,我正在IntelliJ中使用运行配置。没用
dleerob

2
不你不是。我所说的是“ Spring Boot运行配置”,运行->编辑配置>新建> Spring Boot。
Stephane Nicoll

嗯,是的,由于需要在build.gradle中将project.properties扩展到application.properties,因此我脱离了Spring Boot运行配置,如果我使用Spring Boot运行配置,它似乎没有用。我将研究解决该问题,然后也许我可以按照您的建议简单地使用活动个人资料字段
dleerob

1
使用Spring Boot配置似乎比它的价值还麻烦。“制作”只是跨资源复制,而不按照构建脚本过滤/更改资源。然后告诉它从gradle运行“ build”而不是“ make”,只会导致运行冻结。如果我改用bootRun,并按照以下答案输入我的环境条目,则一切正常。
dleerob

Answers:


194

我添加-Dspring.profiles.active=test到“ VM选项”,然后重新运行该配置。效果很好。

可以通过以下方式设置

  • 选择 Run | Edit Configurations...
  • 转到Configuration标签
  • 展开Environment部分以显示VM options

我遇到了同样的情况,只是为了一个Maven项目。谢谢您的帮助。我们为每个测试文件都设置了VM选项。
Sri9911

2
这对我也不起作用。我使用gradle和两个模块(api和ui)
Virkom

1
也对我不起作用,也在这里使用gradle。
IARI

嗨,我有同样的问题,但是此修复不能解决问题。重新运行配置是什么意思?就像重新执行任务一样吗?
user1456110

如图所示,我在编辑后运行了该特定测试。
汤姆

82

如果您实际使用Spring Boot运行配置(当前仅在Ultimate Edition中受支持),则很容易在“活动配置文件”设置中预先配置配置文件。

在此处输入图片说明


1
谢谢,我确定这是可行的,但是我没有使用Spring Boot运行配置,而是使用了没有“ Active Profiles”字段的Gradle运行配置。我的gradle构建会过滤并修改它复制到构建目录中的某些属性文件,因此我为此使用了Grade运行配置。
dleerob

正如上面的答案所指出的:如果这对您不起作用,请确保您argsApplication.main()例如SpringApplication.run( Application.class, args );
Xaero Degreaz的

仅Ultimate Edition支持此功能。
朱利安·马里格

感谢@JulienMalige指出这一点。我将编辑我的答案。
丹尼尔·布本海姆


9

随着Spring Boot的发展,似乎已经改变了读取VM选项的方式。当您在Intellij中启动应用程序并希望激活某些配置文件时,可以尝试以下方法:

1.更改虚拟机选项

在“运行”中打开“编辑配置”,然后在“ VM选项”中添加: -Dspring.profiles.active=local

实际上,它与我的一个项目工程Spring Boot v2.0.3.RELEASESpring v5.0.7.RELEASE,但是用另一个项目Spring Boot v2.1.1.RELEASESpring v5.1.3.RELEASE

另外,当使用Maven或JAR运行时,人们提到了这一点:

mvn spring-boot:run -Drun.profiles=dev

要么

java -jar -Dspring.profiles.active=dev XXX.jar

(请参阅此处:如何使用Spring Boot配置文件

2.传递JVM args

在某处提到,如果您指定一些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

3.设置(应用程序)环境变量

对于第二个项目,对我有用的是设置环境变量,如上面的一些回答所述:“编辑配置”-“环境变量”,以及:

SPRING_PROFILES_ACTIVE=local

1
env var实际上应该是SPRING_PROFILES_ACTIVE
乔什·M

我将其添加到IDEA“ VM选项”的“运行配置”(例如“ spring.profiles.active”)中,并且可以正常运行。也许在系统范围内,在系统范围内使用诸如urs的另一种形式?
WesternGun

如果要添加~/.profile或类似的东西,则必须使用SPRING_PROFILES_ACTIVE- spring.profiles.active可能仅在命令行上用作参数。
乔什·

1
啊..所以你的意思和我所怀疑的一样。实际系统环境不只是应用程序环境。好的,我进行编辑。
WesternGun

8

我最终在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


6

一个可能的原因可能是您没有将命令行参数传递给应用程序main方法。几周前我犯了同样的错误。

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

感谢您的答复和建议,但是我还是将论点传递给了我
。– dleerob

这实际上解决了我的问题。由于某种原因,当我使用Gradle创建项目时,它没有自动生成我的Application类,而是从内存中手动生成的。错过了该args步骤,因此运行配置中的“活动配置文件”框不起作用-我必须-Dspring.profiles.active在VM选项框中手动输入。
Xaero Degreaz '16


3

对于Spring Boot 2.1.0及更高版本,您可以使用

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar


2
在您的命令行中将是spring-boot:run -Dspring-boot.run.profiles=local
K.先生,

用spring-boot:run这就是答案
kakabali

2

就我而言,我在中的VM选项中使用了以下配置IntelliJ,它不是选择本地配置,而是在重新启动后IntelliJ从中选择了配置详细信息IntelliJ并开始运行服务。

-Dspring.profiles.active=local

0

试试这个。如下编辑您的build.gradle文件。

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

-Dspring.profiles.active=local在程序参数下设置。


我已从上述问题中删除了引号。我实际上并没有使用引号,我只是在尝试准确显示我在运行配置字段中输入的内容
dleerob 16/09/28

5
您的意思是VM选项!
Michail Michailidis

这个答案很容易引起误解,因为程序参数不会被应用程序识别!
yuranos '18

正如其他人所提到的,此答案将不起作用,它应该在IntelliJ Idea中的VM Options下,而不是在程序参数中
abstractKarshit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.