我在tomcat context.xml文件中设置了一些属性,如下所示
<Parameter name="foobar" value="something" />
我正在使用符号$ {foobar}将这些值读入我的spring XML。当我使用context:property-placeholder标记时,这很好用,但是当我直接将它定义为PropertyPlaceHolderConfigurer bean时,我收到以下错误:
无法在字符串值“$ {foobar}”中解析占位符'foobar'
旧(工作):
<context:property-placeholder location="/WEB-INF/classes/*.properties" />
新(不工作):
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/app.properties</value>
<value>/WEB-INF/classes/security.properties</value>
</list>
</property>
</bean>
答案 0 :(得分:1)
我怀疑你要回到这个较旧的表示法,因为你被迫使用较旧版本的弹簧,或者你想要使用context:property-placeholder
的多个位置。
较早版本的春天
使用旧版本的spring来获得此功能时,您应该使用ServletContextPropertyPlaceholderConfigurer
。它不需要servlet容器工作,因为它将回退到 PropertyPlaceholderConfigurer 。所以要适应你的例子:
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/app.properties</value>
<value>/WEB-INF/classes/security.properties</value>
</list>
</property>
</bean>
默认情况下,位置中定义的属性优先,但这是可选的。
使用context:property-placeholder
对于较新版本的spring,您可以使用context xml property-placeholder加载多个配置文件:
<context:property-placeholder location="/WEB-INF/classes/app.properties" order="1" ignore-unresolvable="true" />
<context:property-placeholder location="/WEB-INF/classes/app.properties" order="2" ignore-unresolvable="true" />
如果对于某些人而言,您希望使用更明确的bean用于其他原因,则可以使用用于实现xml注释的PropertySourcesPlaceholderConfigurer
。但一般人们都会使用xml接线。
答案 1 :(得分:1)
要使用的正确类是PropertySourcesPlaceholderConfigurer(从Spring 3.1开始)。
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/app.properties</value>
<value>/WEB-INF/classes/security.properties</value>
</list>
</property>
</bean>
来自JavaDocs:
PlaceholderConfigurerSupport的专业化,它针对当前的Spring环境及其PropertySources集解析bean定义属性值和@Value注释中的$ {...}占位符。