在spring boot

时间:2015-06-24 22:30:12

标签: java spring gradle spring-boot yaml

我有一个春季启动应用程序。

我的应用程序中有三个配置文件 - > 开发,分期和生产。所以我有3个文件

  1. 应用development.yml
  2. 应用staging.yml
  3. 应用production.yml
  4. 我的 application.yml 位于src/main/resources内。我已将application.yml中的活动配置文件设置为:

    spring:
      profiles.active: development
    

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

    我正在使用gradle插件进行eclipse。当我尝试执行“ bootRun ”时,我在eclipse中的gradle配置中设置命令行参数

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

    但是,命令行属性没有得到反映,我的活动配置文件总是被设置为开发(这是我在applications.yml文件中提到的那个)。此外,不会在C:\ Config文件夹中搜索特定于配置文件的配置文件。

    我想我在这里遗漏了一些东西。过去两天我一直试图解决这个问题。但没有运气。我真的很感激任何帮助。

12 个答案:

答案 0 :(得分:219)

有两种不同的方法可以在命令行上添加/覆盖spring属性。

选项1:Java系统属性(VM参数)

-D参数位于application.jar之前非常重要 否则他们不被承认。

java -jar -Dspring.profiles.active=prod application.jar


选项2:程序参数

java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config

答案 1 :(得分:15)

我不得不补充一下:

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    String confLoc = System.properties['spring.config.location']
    systemProperty "spring.profiles.active", activeProfile
    systemProperty "spring.config.location", "file:$confLoc"
}

现在,bootRun会选择配置文件和配置位置。

非常感谢@jst指针。

答案 2 :(得分:9)

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

不正确。

应该是:

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

答案 3 :(得分:8)

您可以使用以下命令行:

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar

答案 4 :(得分:6)

通过 Maven插件设置个人资料时,您必须通过run.jvmArguments

进行设置
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

使用调试选项:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

我看过这次旅行很多人......希望它有所帮助

答案 5 :(得分:6)

设置操作系统变量 SPRING_PROFILES_ACTIVE 还有另一种方法。

例如:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

参考:How to set active Spring profiles

答案 6 :(得分:3)

我认为你的问题很可能与你的spring.config.location有关,并没有以" /"结束路径。

引用文档

  

如果spring.config.location包含目录(而不是文件),则它们应该以/结尾(并且在加载之前将附加从spring.config.name生成的名称)。

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

答案 7 :(得分:2)

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

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

文档中不清楚的是它是什么类型的参数:--spring.profiles.active不是标准的JVM参数,因此如果要在IDE中使用它,请填写正确的字段(即程序参数)

答案 8 :(得分:1)

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

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

Spring 2.x

-Dspring-boot.run.profiles=local

Spring 1.x

-Dspring.profiles.active=local

使用Maven的示例:

Spring 2.x

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

Spring 1.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

答案 9 :(得分:1)

我们要根据spring.profiles.active中提到的配置文件名称和-Dspring.config.location中的路径来自动选择属性文件

application-dev.properties

如果我们在U​​nix OS中运行jar,则必须在/的末尾使用-Dspring.config.location,否则会出现以下错误。

错误:: java.lang.IllegalStateException:任何PropertySourceLoader都不知道配置文件位置'file:/ home / xyz / projectName / cfg'的文件扩展名。如果该位置用于引用目录,则该位置必须以'/'

结尾

示例

java -Dspring.profiles.active=dev -Dspring.config.location=/home/xyz/projectName/cfg/ -jar /home/xyz/project/abc.jar

java -jar /home/xyz/project/abc.jar --spring.profiles.active=dev --spring.config.location=/home/xyz/projectName/cfg/

答案 10 :(得分:1)

我在 intellij 上执行此操作的一种方法是在命令上设置环境变量,如下所示:

test setup on intellij

在这种情况下,我将配置文件设置为测试

答案 11 :(得分:0)

如果您使用Gradle:

-Pspring.profiles.active=local