为什么Spring Value中的默认值不会阻止NULL错误?

时间:2016-04-06 20:41:05

标签: java spring spring-el

我在Java代码中定义了以下属性:

import org.springframework.beans.factory.annotation.Value;
...
@Value("#{sdProperties['is.test.server'] ?: false }") 
private boolean isTestServer = false;

同样在XML配置文件中我有:

<util:properties id="sdProperties">
    <prop key="sdzootest.server.url">${sdzootest.server.url}</prop>
    <prop key="is.test.server">${is.test.server}</prop>
</util:properties> 

但是,如果未在属性文件中指定is.test.server,我将收到错误:

  

2016-04-06 15:52:00,161 [localhost-startStop-1]错误   com.elasticpath.web.context.impl.EpContextConfigListener:69 - 抓住了   一个例外。   org.springframework.beans.factory.BeanDefinitionStoreException:   名称为sdProperties的无效bean定义以null定义:可以   不解决占位符&#39; is.test.server&#39;在字符串值中   &#34; $ {is.test.server}&#34;

1 个答案:

答案 0 :(得分:1)

PlaceholderConfigurerSupport有一个特殊属性ignoreUnresolvablePlaceholders

  

如果配置程序无法解析占位符,请执行以下操作:   将抛出BeanDefinitionStoreException。如果你想检查   针对多个属性文件,通过指定多个资源   地点财产。您还可以定义多个配置器   有自己的占位符语法。使用ignoreUnresolvablePlaceholders   如果占位符不能,故意禁止抛出异常   得到解决。

目前尚不清楚如何设置占位符支持,因此有以下几种选择:

<context:property-placeholder
        ignore-unresolvable="true"
        location="classpath:app.properties"/>

@Bean
public PropertySourcesPlaceholderConfigurer ppc() {
    PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
    ppc.setIgnoreUnresolvablePlaceholders(true);
    return ppc;
}