我正在使用Spring 4.0.7,它使用Spring 4.0.7。我使用@Value注释在我的类中自动装配属性。如果属性文件中没有属性,我想要一个默认值,所以,我使用":"分配默认值。以下是示例:
@Value("${custom.data.export:false}")
private boolean exportData = true;
如果属性文件中不存在属性,则应该为变量赋值false。但是,如果文件中存在 if 属性,则它还会分配默认值并忽略属性值。
例如。如果我已经像上面提到的那样定义了属性,并且应用程序属性文件具有类似custom.data.export=true
的内容,则exportData
的值仍然为false,而它应该为true理想地
有人可以指导我在这里做错了吗?
由于
答案 0 :(得分:12)
我们被以下Spring bug咬了一下,症状完全相同:
[SPR-9989] Using multiple PropertyPlaceholderConfigurer breaks @Value default value behavior
基本上,如果ApplicationContext中存在多个PropertyPlaceholderConfigurer
,则只会解析预定义的默认值,并且不会进行覆盖。设置不同的ignoreUnresolvablePlaceholders
值对此事没有影响,一旦我们删除了额外的PropertyPlaceholderConfigurer
,这两个值(真/假)在这方面同样有效。
调查一下,每个定义的PropertyPlaceholderConfigurer
内部都按预期解析了属性,但是Spring无法弄清楚要使用哪些属性来为@Value
注入一个值注释字段/参数。
答案 1 :(得分:3)
您可以执行以下操作之一来克服此问题:
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="valueSeparator" value="-defVal-"/>
</bean>
&#13;
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="order" value="-2147483648"/>
</bean?
&#13;
我在这个问题上做了一些RnD available here。
答案 2 :(得分:0)
正如@Ophir Radnitz所说,这是一个Spring错误,当ApplicationContext中存在多个PropertyPlaceholderConfigurer时会发生。
作为一种解决方法,您可以通过以下方式获得所需的行为:
<binding protocol="http" bindingInformation="*:5000:*" />