我正在使用Spring 1.1.8,它使用Spring4.0.7。我正在使用@Value注释自动处理类中的属性。如果属性文件中没有属性,我希望有一个默认值,所以我使用":“来分配默认值。下面是一个例子:
@Value("${custom.data.export:false}")
private boolean exportData = true;如果属性在属性文件中不存在,则应该将false赋值给变量。但是,如果文件中存在属性,则也会分配默认值并忽略属性值。例如,如果我像上面提到的那样定义了属性,并且应用程序属性文件有类似于这个custom.data.export=true的东西,那么exportData的值仍然是,而理想情况下它应该是假的。
有人能指点我这里做错了什么吗?
谢谢
发布于 2015-10-29 22:53:22
我们被以下Spring咬了一口,症状完全相同:
[SPR-9989]使用多个PropertyPlaceholderConfigurer中断@Value默认值行为
基本上,如果在PropertyPlaceholderConfigurer中存在一个以上的ApplicationContext,则只会解决预定义的默认值,并且不会发生重写。设置不同的ignoreUnresolvablePlaceholders值对问题没有影响,在删除额外的PropertyPlaceholderConfigurer后,这两个值(真/假)在这方面同样有效。
查看它,每个定义的PropertyPlaceholderConfigurer内部解析了预期的属性,但是Spring无法确定要使用哪些属性来向@Value注释的字段/params注入值。
发布于 2017-02-28 06:21:49
您可以执行以下操作之一以克服这一问题:
<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>
<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?
我在这个问题上做了一些RnD,可在这里找到。
发布于 2018-06-20 18:18:49
正如@Ophir Radnitz所指出的,这是一个春季bug,当ApplicationContext中有多个ApplicationContext时就会发生这种情况。
作为一种解决办法,您可以通过这样的方法获得所需的行为:
(...)
@Autowired
private Environment environment;
(...)
private Boolean shouldExportData()
{
return environment.getProperty( "custom.data.export", Boolean.class, Boolean.FALSE );
}https://stackoverflow.com/questions/28369582
复制相似问题