【问题标题】:How do I activate a Spring Boot profile when running from IntelliJ?从 IntelliJ 运行时如何激活 Spring Boot 配置文件?
【发布时间】:2017-02-05 22:13:23
【问题描述】:

我有 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选项下的运行配置。

都不行。我一直在启动时看到 INFO 消息:没有设置活动配置文件,回退到默认配置文件:默认

如果我使用

从 Windows 命令行运行我的应用程序
gradle bootRun

但我先设置环境变量

set SPRING_PROFILES_ACTIVE=local

然后一切正常。

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

【问题讨论】:

  • 你为什么在那里通过 gradle 运行应用程序?使用运行配置岂不是方便10倍?有一个字段,您可以在其中设置配置文件以启用...
  • 我在 IntelliJ 中使用运行配置,如上所述。它不工作。
  • 不,你不是。我说的是“Spring Boot 运行配置” Run -> Edit configuration > New > Spring Boot。
  • 啊,是的,我离开了 Spring Boot 运行配置,因为我需要在 build.gradle 中将 project.properties 扩展为 application.properties,如果我使用 Spring Boot 运行配置,它没有似乎工作。我会考虑解决这个问题,然后也许我可以按照你的建议简单地使用活动配置文件字段
  • 使用 Spring Boot 配置似乎麻烦多于其价值。 “制作”只是跨资源复制,不会根据构建脚本过滤/更改它们。然后告诉它从 gradle 运行 'build' 而不是 'make' 只会导致运行冻结。如果我改用 bootRun 以及按照下面的答案输入我的环境,一切正常。

标签: spring intellij-idea gradle spring-boot


【解决方案1】:

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

【讨论】:

  • 我已经从上面的问题中删除了引号。我实际上并没有使用引号,我只是想准确显示我在运行配置字段中输入的内容
  • 你的意思是虚拟机选项!
  • 这个答案非常具有误导性,因为应用程序无法识别程序参数!
  • 这个答案不起作用,正如其他人所提到的,它应该在 IntelliJ Idea 的 VM 选项下,而不是在程序参数中
【解决方案2】:

我最终将以下内容添加到我的 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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的回复和建议,但是我正在传递参数。
    • 这实际上解决了我的问题。出于某种原因,当我使用 Gradle 创建项目时,它没有自动生成我的 Application 类,所以它是从内存中手动生成的。错过了args 步骤,因此运行配置中的“活动配置文件”框不起作用——我不得不在VM 选项框中手动传入-Dspring.profiles.active
    【解决方案4】:

    如果您实际使用 spring boot 运行配置(目前仅在 Ultimate Edition 中支持),则可以轻松在“Active Profiles”设置中预先配置配置文件。

    【讨论】:

    • 谢谢,我确信这会起作用,但是我没有使用 Spring Boot 运行配置,我使用的是没有“活动配置文件”字段的 Gradle 运行配置。我的 gradle build 过滤并修改了它复制到 build 目录的一些属性文件,所以我为此使用 Grade 运行配置。
    • 正如上面的答案指出的那样:如果这对您不起作用,请确保您在Application.main() 中传递args,例如SpringApplication.run( Application.class, args );
    • 此功能仅在 Ultimate 版本中受支持。
    • 感谢@JulienMalige 指出这一点。我将编辑我的答案。
    【解决方案5】:

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

    可以设置

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

    【讨论】:

    • 我陷入了同样的境地,但是是针对一个 Maven 项目。谢谢您的帮助。我们为每个测试文件设置了 VM 选项。
    • 它对我也不起作用。我使用 gradle 和两个模块(api 和 ui)
    • 对我也不起作用,这里也使用 gradle。
    • 您好,我有同样的问题,但此修复无法解决问题。重新运行配置是什么意思?和重新运行任务一样吗?
    • 通常最好使用 spring.profiles.include,因为 spring.profiles.active 也会禁用其他配置文件。停用默认配置文件可能是不受欢迎的。
    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      我使用 Intellij 社区版。 转到“运行/调试配置”> 运行器选项卡 > 环境变量 > 单击按钮“...”。添加: SPRING_PROFILES_ACTIVE = 本地

      spring.profiles.active

      【讨论】:

        【解决方案8】:

        尝试在你的 build.gradle 中添加这个命令

        所以为了运行配置该形状:

        【讨论】:

          【解决方案9】:

          随着 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
          

          (见此处:how to use Spring Boot profiles

          2。传递 JVM 参数

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

          【讨论】:

          • 环境变量实际上应该是SPRING_PROFILES_ACTIVE
          • 我在IDEA“VM选项”的“运行配置”中添加了它,比如“spring.profiles.active”,它可以工作。也许像 urs 这样的另一种形式在系统属性中在系统范围内使用?
          • 如果你将它添加到~/.profile 或类似的,你必须使用SPRING_PROFILES_ACTIVE -- spring.profiles.active 可能只在命令行上作为一个参数。
          • 啊..所以你的意思和我怀疑的一样;真正的系统环境不仅仅是应用程序环境。好的,我进行编辑。
          • 这个答案非常简洁完整
          【解决方案10】:

          Spring Boot 2.1.0 及以后可以使用

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

          【讨论】:

          • 在你的命令行中将是spring-boot:run -Dspring-boot.run.profiles=local
          • with spring-boot:run 这就是答案
          【解决方案11】:

          您可以尝试以上方式激活个人资料

          【讨论】:

            【解决方案12】:

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

            -Dspring.profiles.active=local
            

            【讨论】:

              【解决方案13】:

              所以为了恢复...

              如果您拥有 IntelliJ Ultimate,则正确答案是 Daniel Bubenheim 提供的答案

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

              SPRING_PROFILES_ACTIVE=profilename
              

              并执行 jar 操作:

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

              【讨论】:

                【解决方案14】:

                经 IntelliJ 社区版 2021.x 测试

                您可以创建多个配置,每个配置用于一个特定的配置文件,在下面的例子中,我创建了一个带有开发配置文件环境变量的开发配置。

                1. 转到运行 > 编辑配置
                2. 在左侧的应用程序下选择要编辑的配置。
                3. 右侧>环境变量下,更新spring.profiles.active=<your profile name>示例 spring.profiles.active=dev (观察者:- 变量应该没有 -D 标志)
                4. 保存更改并使用相同的配置运行 Spring Boot 应用程序。

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

                【讨论】:

                  【解决方案15】:

                  这里有两种方法

                  1. 使用 gradle 项目属性

                  在 build.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 配置中,根据您要运行的环境更改“-Pprofiles”中的值“test”

                  1. 使用环境属性

                  关注@Hubert https://stackoverflow.com/a/39749545/3333878的回答

                  并将运行配置配置为

                  【讨论】:

                    猜你喜欢
                    • 2021-12-20
                    • 2019-03-14
                    • 2019-12-15
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-01-14
                    • 2019-01-05
                    • 2015-09-04
                    • 2017-12-01
                    相关资源
                    最近更新 更多