java - Spring @PropertySources 值不被覆盖

标签 java spring spring-mvc spring-boot

我正在 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/

相关文章:

java - 意外字符 ('a'(代码 97)) : expected a valid value (number, 字符串、数组、对象、 'true'、 'false' 或 'null')

java - 为什么我的 RESTful API 在执行 SQL 查询时如此慢?但当我刚刚运行查询时速度很快

带有补丁方法的 Spring Data Rest 自定义 Controller - 如何将资源与实体合并

java - OpenCV - 在视频和图像上查找黑板边缘

java - 在 Java 中查找具有不同数据类型的最大 3 个数字

java - 为什么要同步Java方法Provider.getService(String type,String algorithm)?

java.lang.ClassNotFoundException : org. springframework.web.context.support.AnnotationConfigApplicationContext

java - 行被另一个事务更新或删除(或未保存值映射不正确)

java - Spring Data MongoDB,按长值搜索

java - hibernate 3 : optimistic locking unit test