如果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
答案 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.properties
中application-override.properties
的属性。
不需要在替代配置文件中使用spring.profiles.include=default
。
如果要加载具有相同属性的多个特定配置文件:
此外,在使用配置文件覆盖属性的情况下,当您有多个活动配置文件且它们包含相同的属性时,要记住一些注意事项。将使用列表中的最后一个配置文件。
假设您使用mvn spring-boot:run -Drun.profiles=profile1,profile2
application-profile1.properties
和application-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
Spring会先加载application.properties
,然后再加载任何application-{profile}.properties
。
另一种选择是使用yaml,并将所有内容加载到一个文件中:
foo:
bar: 1
---
spring:
profiles: override
foo:
baz: 1
---
spring:
profiles: otherOverride
foo:
bar: 2
baz: 2