Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从IntelliJ运行时,如何激活Spring启动配置文件?_Spring_Intellij Idea_Gradle_Spring Boot - Fatal编程技术网

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

从IntelliJ运行时,如何激活Spring启动配置文件?,spring,intellij-idea,gradle,spring-boot,Spring,Intellij Idea,Gradle,Spring Boot,我有5个环境: - local (my development machine) - dev - qc - uat - live - staging 我希望每个环境使用不同的应用程序属性,因此我有以下属性文件,每个文件都有不同的数据源URL: - application.properties (containing common properties) - application-local.properties - application-dev.properties

我有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=local

在脚本参数下运行配置

我试着添加

-Dspring.profiles.active=本地

在VM选项下运行配置

两者都不起作用。我一直看到启动时的信息消息说:没有活动配置文件集,返回默认配置文件:默认

如果我从windows命令行使用

gradle bootRun
但是我首先设置了环境变量

set SPRING_PROFILES_ACTIVE=local
然后一切都开始了


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

在程序参数下设置-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\u PROFILES\u ACTIVE”环境变量


我从这里找到的一条评论中得到了这一点:

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

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

如果您实际使用spring引导运行配置(目前仅在Ultimate版本中支持),那么在“活动配置文件”设置中预配置配置文件就很容易了


我在VM选项中添加了
-Dspring.profiles.active=test
,然后重新运行该配置。它工作得很好

这可以通过以下方式设置:

  • 选择
    Run |编辑配置…
  • 转到
    配置
    选项卡
  • 展开
    环境
    部分以显示
    虚拟机选项

    • 试试这个。编辑build.gradle文件,如下所示

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

      我使用Intellij社区版。 转到“运行/调试配置”>Runner选项卡>环境变量>单击按钮“…”。加: 弹簧配置文件激活=本地


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

      因此,要运行该形状,请配置:


      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
      

      (见此处:)

      2.传递JVM参数 有人提到,如果指定一些JVM选项,Spring会改变启动应用程序进程的方式;它派生另一个进程,并且不会通过它收到的arg,因此这不起作用。向其传递参数的唯一方法是:

      mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
      
      同样,这是给Maven的。

      3.设置(应用程序)环境变量 在第二个项目中,对我有效的是设置环境变量,如上面的一些回答所述:“编辑配置”-“环境变量”,以及:

      以后您可以使用

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


      您可以尝试上面的方法来激活配置文件

      在我的案例中,我在
      IntelliJ
      中的VM选项中使用了下面的配置,它没有选择本地配置,但在重新启动
      IntelliJ
      后,它从
      IntelliJ
      中选择了配置详细信息,服务开始运行

      -Dspring.profiles.active=local
      
      所以对于恢复

      如果您有IntelliJ Ultimate,则正确答案是

      但如果没有,请在运行->编辑配置中创建,并在配置选项卡中添加下一个环境变量:

      SPRING_PROFILES_ACTIVE=profilename
      
      要执行jar,请执行以下操作:

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

      我已经删除了上面问题中的引语。我实际上并没有使用引号,我只是想准确地显示我在运行配置字段中输入的内容您是指VM选项!这个答案很容易引起误解,因为应用程序无法识别程序参数!这个答案不会起作用,正如其他人提到的,它应该在IntelliJ Idea中的VM选项下,而不是在程序参数中。您为什么要通过gradle在那里运行应用程序?使用运行配置不是方便了10倍吗?有一个字段,您可以在其中设置要启用的配置文件…我正在使用IntelliJ中的运行配置,如上所述。没用,不,你没用。我说的是“Spring Boot运行配置”运行->编辑配置>新建>Spring Boot。啊,是的,我从Spring Boot运行配置转移到build.gradle中的application.properties中,因为我需要将project.properties扩展到application.properties,如果我使用Spring Boot运行配置,它似乎不起作用。我将研究如何解决这个问题,然后也许我可以简单地使用activeprofile字段,正如您所建议的那样,使用Spring引导配置似乎比它的价值更麻烦。“Make”只是跨资源进行复制,而不是按照by build脚本进行过滤/更改。然后告诉它从gradle而不是“make”运行“build”只会导致运行冻结。如果我使用bootRun,以及我的环境条目,如下面的答案所示,一切都很好。谢谢你的回复和建议,不过我正在传递参数
      SPRING_PROFILES_ACTIVE=profilename
      
      java -jar -Dspring.profiles.active=profilename XXX.jar