从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

正如上面的答案所指出的:如果这对您不起作用,请确保您args在Application.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.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

(请参阅此处:如何使用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.