Spring PropertyPlaceholderConfigurer默认值覆盖实际属性值

时间:2015-03-19 20:34:14

标签: java spring properties

我有一个使用@Value注释填充属性的bean,就像这个

一样
@Value("${propbean.value : 'None'}")
private String value;

在我的应用程序上下文中,我有以下配置

<bean id="propbean"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="file:${path}/values.properties"
      p:ignoreResourceNotFound="true"
      p:ignoreUnresolveablePlaceholders="true" />

当values.properties文件不存在时,默认设置为“无”按预期设置,但是当属性文件 时,默认值仍在使用,即使我从PropertyPlaceholderConfigurer

接收属性文件加载的日志消息
190315 14.23.44,517 {} {} {} INFO  (PropertiesLoaderSupport.java:172) Loading properties file from URL [file:/path/to/file/values.properties]

当缺少属性文件和/或占位符不可解析时,我需要默认值才能生效 ;不是所有的时间。我也尝试过使用SPEL,但因为这是一个PropertyPlaceholderConfigurer对象而不是使用该指令,所以SPEL解决方案对我不起作用。我的理解是,当占位符使用$ {value:default}格式时,默认值仅在值为null时被替换,但是如果我从值占位符中删除“:'None'”,则属性会正确解析!

1 个答案:

答案 0 :(得分:0)

希望这有助于将来的某个人 - 问题是bean定义中的p:ignoreUnresolveablePlaceholders="true"属性。显然,无论如何设置默认值,它都会指示Spring完全忽略被读入bean的属性。

将属性/设置删除为false可以完全解决问题。