我无法让 PropertyPlaceholderConfigurer 在我当前的配置中工作。鉴于我的 applicationContext.xml 中的以下代码块:
<bean id="myProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<!-- Order matters, last one to create a property wins! -->
<value>classpath:default.properties</value>
<value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value>
<value>file:${user.home}/developer.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertiesPlaceholderConfigurer">
<property name="properties" ref="myProperties"/>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="searchSystemEnvironment" value="true"/>
</bean>
然后在 default.properties 文件中,我有以下内容(这些是测试属性):
property1=prop1val
property2=${property1}
工作原理:propertyConfigurer 正确解析环境变量 MYAPP_PROPERTIES_LOCATION 和系统变量 user.home。但是,最终的属性对象是由工厂 bean 创建的,结果属性是 [property1=prop1val, property2=${property1}]。
使用此配置,如何获取 myProperties bean 中的属性来解析它们的占位符? 我已经做了大量的研究,包括跟踪 spring 代码 - 我可以看到如何以及为什么没有这样做。我希望有一些我只是想念的设置!这是我的第一篇文章,所以请放轻松:)