我正在 Tomcat 中将 Spring Boot 应用程序部署为 WAR 文件。我希望我的 application-local.properties 能够覆盖 application.properties 文件中也存在的值。但似乎只有当 application.properties 中不存在这些键时,才会读取 application-local.properties 中的值。我的 application.properties 文件位于项目的 src/main/resources/中,application-local.properties 位于 ${catalina.home}/property_files/com/demo/config 文件夹
上下文.xml
<Parameter name="spring.profiles.active" value="local" override="false"/>
catalina.properties
shared.loader=${catalina.home}/property_files
AppConfig.java
@Configuration
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource("classpath:com/demo/config/application-${spring.profiles.active}.properties")
})
public class AppConfig extends WebMvcConfigurerAdapter {
}
编辑1:实际上,我的环境相关属性文件正在加载。但它不会覆盖内部属性文件中的任何值。
编辑2:感谢您的所有建议。但我发现我的问题是由目录优先级引起的。事实证明,根类路径上的属性文件比任何属性文件都具有更高的优先级,无论它们声明的顺序如何。
最佳答案
将默认配置/属性放在不同的文件中,而不是 application.properties。看来 application.properties 中定义的属性值具有最高优先级。
所以,这样的事情会起作用:
@Configuration
@PropertySource("classpath:application-env.properties")
@PropertySource(value="file:${application.home}/application-env.properties",ignoreResourceNotFound=true)
public class GlobalSettings {
//configuration values
}
在 Spring 4.x 和 Java 8 中测试
关于java - Spring @PropertySources 值不被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339226/