我有一个春季启动应用程序。
我的应用程序中有三个配置文件 - > 开发,分期和生产。所以我有3个文件
我的 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文件夹中搜索特定于配置文件的配置文件。
我想我在这里遗漏了一些东西。过去两天我一直试图解决这个问题。但没有运气。我真的很感激任何帮助。
答案 0 :(得分:219)
有两种不同的方法可以在命令行上添加/覆盖spring属性。
-D参数位于application.jar之前非常重要 否则他们不被承认。
java -jar -Dspring.profiles.active=prod application.jar
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
答案 6 :(得分:3)
我认为你的问题很可能与你的spring.config.location有关,并没有以" /"结束路径。
引用文档
如果spring.config.location包含目录(而不是文件),则它们应该以/结尾(并且在加载之前将附加从spring.config.name生成的名称)。
答案 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
如果我们在Unix 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)
答案 11 :(得分:0)
如果您使用Gradle:
-Pspring.profiles.active=local