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

我的应用程序中有三个概要文件——>开发、登台和生产。我有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文件夹不会搜索配置文件特定的配置文件。

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


当前回答

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

选项1:Java系统属性(虚拟机参数)

-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

其他回答

您可以使用以下命令行:

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

我认为您的问题可能与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

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

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

还有另一种方法,通过设置OS环境变量SPRING_PROFILES_ACTIVE。

例如:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

参考:如何设置活动的Spring概要文件

我的最佳实践是将其定义为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