我有一个弹簧引导应用程序。

我的应用程序中有三个概要文件——>开发、登台和生产。我有3个文件

application-development.yml application-staging.yml application-production.yml

我的应用程序。Yml位于src/main/resources中。我已经在应用程序中设置了活动配置文件。Yml为:

spring:
  profiles.active: development

其他3个特定于配置文件的配置文件在C:\config文件夹中。

我正在为eclipse使用gradle插件。当我尝试做一个“bootRun”,我设置命令行参数在我的gradle配置在eclipse为

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

然而,命令行属性没有得到反映,我的活动概要文件总是被设置为开发(这是我在应用程序中提到的一个)。yml文件)。此外,C:\Config文件夹不会搜索配置文件特定的配置文件。

我想我遗漏了一些东西。过去两天我一直在想这件事。但运气不好。我非常感激你的帮助。


当前回答

我在springboot的命令行中使用不同的配置文件运行测试时也遇到了类似的问题。我通过首先设置配置文件,然后运行测试命令来解决这个问题,如下所示:

步骤1:导出SPRING_PROFILES_ACTIVE=test(mac/linux)或SET SPRING_PROFILES_ACTIVE=test(windows)

Step2: ./gradlew测试——测试com.maersk.snd.integrationtest.IntegrationTestPOC"

以上命令可以像下面这样组合在一起:

export SPRING_PROFILES_ACTIVE=test && ./gradlew test——tests "com.maersk.snd.integrationtest.IntegrationTestPOC"

其他回答

Michael Yin的答案是正确的,但似乎需要一个更好的解释!

很多人提到-D是指定JVM参数的正确方法,你说的完全正确。但是正如Spring Boot Profiles文档中提到的那样,Michael也是对的。

文档中不清楚的是,它是什么样的参数:——spring.profiles。active不是一个标准的JVM参数,所以如果你想在你的IDE中使用它,请填写正确的字段(即程序参数)

我的最佳实践是将其定义为VM“-D”参数。请注意弹簧靴之间的区别。X和2.x。

要启用的概要文件可以在命令行上指定:

Spring-Boot 2。X(仅适用于maven)

-Dspring-boot.run.profiles=local

Spring-Boot 1.倍

-Dspring.profiles.active=local

maven的用法示例:

Spring-Boot 2.倍

mvn spring-boot:run -Dspring-boot.run.profiles=local

Spring-Boot 1。X和2.x

mvn spring-boot:run -Dspring.profiles.active=local

对于多个配置文件,请确保用逗号分隔它们:

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

就像一个插件,如果你有一个属性在你的应用程序中提到。属性文件,你需要覆盖另一个配置文件的属性,你可以使用下面的属性spring.config。附加位置(使用-D,因为从命令行传递) 我们以前用这个是因为我们有一个应用。jar中的属性和每个服务器配置文件夹中的一个外部属性,用于覆盖任何服务器特定的属性。

如果你使用Gradle:

-Pspring.profiles.active=local

这将解决你在windows上的问题:

mvn spring-boot:run -D"spring-boot.run.profiles"=env