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

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

虚拟机选项下的“运行”配置。

既不工作。我一直看到信息启动说:没有活动概要设置,回落到默认概要:default

如果我运行我的应用程序从windows命令行使用

gradle bootRun

但我先设置环境变量

set SPRING_PROFILES_ACTIVE=local

然后一切正常。

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

360229 次浏览

在程序参数下设置-Dspring.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

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

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

如果你真的使用了spring引导运行配置(目前只在终极版中支持),那么在“Active profiles”设置中预配置概要文件是很容易的。

enter image description here

我将-Dspring.profiles.active=test添加到VM选项,然后重新运行该配置。它工作得很完美。

可以通过

  • 选择Run | Edit Configurations...
  • 转到Configuration选项卡
  • 展开Environment部分来显示VM options

试试这个。编辑构建。Gradle文件如下所示。

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }
我使用Intellij社区版。 进入“运行/调试配置”> Runner选项卡>环境变量>单击“…”按钮。添加: SPRING_PROFILES_ACTIVE = local

spring.profile .active

尝试在build.gradle中添加此命令

enter image description here

为了运行配置这个形状:

enter image description here

随着Spring Boot的发展,它似乎已经改变了读取VM选项的方式。这里有一些方法来尝试当你在Intellij中启动一个应用程序,并想要激活一些配置文件:

1. 修改虚拟机选项

在“运行”中打开“编辑配置”,在“虚拟机选项”中添加:-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参数

在某个地方提到,如果您指定一些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 < / p >

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

对我来说,第二个项目的工作是设置环境变量,正如上面的一些回答所提到的:“编辑配置”-“环境变量”,以及:

SPRING_PROFILES_ACTIVE=local

对于Spring Boot 2.1.0和以后的版本,可以使用

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

Replace your profile name with BE

您可以尝试使用上述方法激活配置文件

在我的情况下,我在IntelliJ中的VM选项中使用了下面的配置,它不是选择本地配置,但在IntelliJ重新启动后,它从IntelliJ中选择配置细节,服务开始运行。

-Dspring.profiles.active=local

至于恢复…

如果你有IntelliJ终极,正确答案是由丹尼尔Bubenheim提供的

但是如果你没有,在Run->Edit Configurations中创建,并在Configuration选项卡中添加下一个环境变量:

SPRING_PROFILES_ACTIVE=profilename

要执行jar,请执行:

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

IntelliJ社区版2021.x测试

您可以创建多个配置,每个配置一个特定的概要文件,在下面的例子中,我已经创建了一个开发配置与开发概要文件环境变量。

  1. 去跑>编辑配置
  2. 在左边的Application下面,选择要编辑的配置。
  3. 在右侧>在“环境变量”下,更新spring.profiles.active=<your profile name> example spring.profiles.active=dev < / >强 (观察者:-变量应该没有- d标志) < / em >
  4. 保存更改并运行具有相同配置的Spring引导应用程序。

注意:-您也可以创建一个新的配置或复制上面步骤2中已有的配置,使用同一面板中的可用选项。

enter image description here

这里有两种方法

  1. 使用gradle项目属性

在构建。gradle,添加

bootRun{
//https://github.com/spring-projects/spring-boot/pull/592#issuecomment-880263914
if (project.hasProperty('profiles')) {
environment SPRING_PROFILES_ACTIVE: profiles
} else {
def profiles = 'dev'
environment SPRING_PROFILES_ACTIVE: profiles
}
}

在intellij gradle配置中,更改值&;test&;在“-Pprofiles"根据您想要运行的环境

enter image description here

  1. 使用环境属性

遵循@Hubert https://stackoverflow.com/a/39749545/3333878的回答

并将运行配置配置为

enter image description here

创建这样的文件属性

application.properties
application-dev.properties
application-prod.properties

然后运行

enter image description here