根据弹簧轮廓添加新属性

时间:2019-01-27 10:03:39

标签: java spring spring-boot

如果spring boot是在override配置文件中运行的,我们是否可以拥有application_override.properties,它们具有foo.baz之类的未在application.properties中定义的属性?

application.properties

foo.bar=1

application-override.properties

spring.profiles.include=default 
foo.baz=1

4 个答案:

答案 0 :(得分:2)

您可以为自定义配置文件创建配置类,并在其中加载适当的属性文件,如下所示:

@Configuration
@Profile("override")
@PropertySource("classpath:application-override.properties")
public class OverrideConfig {

}

这样,您在OverrideConfig中所做的所有配置(包括从application-override.properties中获取属性)都只会在如下情况下在application.properties中启用覆盖配置文件时加载:

spring.profiles.active=override

答案 1 :(得分:2)

是正确的。当您在application-override.properties中具有新属性并且覆盖配置文件是活动配置文件时,则在您的程序中会加载application.propertiesapplication-override.properties的属性。

不需要在替代配置文件中使用spring.profiles.include=default

如果要加载具有相同属性的多个特定配置文件:

此外,在使用配置文件覆盖属性的情况下,当您有多个活动配置文件且它们包含相同的属性时,要记住一些注意事项。将使用列表中的最后一个配置文件。

假设您使用mvn spring-boot:run -Drun.profiles=profile1,profile2

启动程序

application-profile1.propertiesapplication-profile2.properties 包含属性my.custom-property=x(对于profile1)和my.custom-property=y(对于profile2)。 my.custom-property的值为y,因为它是所提供的配置文件中的最后一个配置文件。

答案 2 :(得分:2)

长话短说:根据their evaluation order,Spring Boot会覆盖具有相同名称的属性的值。但是在这里您不会覆盖任何属性,您添加新的属性。

那仍然更简单:Spring boot只是将其添加到Spring Environment中。
只需通过指定此配置文件运行应用程序,并确保属性位于Spring Boot所需的位置即可。

胖子罐中的示例(Java系统属性):

java -Dspring.profiles.active=override -jar foo.jar

源代码示例(Maven属性):

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

答案 3 :(得分:1)

是的,您只需将配置文件名称添加到application.properties即可:

application-override.properties

然后您可以从命令行加载配置文件:

java -jar foo.jar --spring.profiles=override

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-change-configuration-depending-on-the-environment

Spring会先加载application.properties,然后再加载任何application-{profile}.properties


另一种选择是使用yaml,并将所有内容加载到一个文件中:

foo:
  bar: 1

---

spring:
  profiles: override
foo:
  baz: 1

---

spring:
  profiles: otherOverride
foo:
  bar: 2
  baz: 2