我在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;
答案 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;
}