我有一个使用@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'”,则属性会正确解析!
答案 0 :(得分:0)
希望这有助于将来的某个人 - 问题是bean定义中的p:ignoreUnresolveablePlaceholders="true"
属性。显然,无论如何设置默认值,它都会指示Spring完全忽略被读入bean的属性。
将属性/设置删除为false可以完全解决问题。