Spring 4 PropertySourcesPlaceholderConfigurer无法跨模块解析$ {..}占位符

时间:2015-05-20 11:09:22

标签: java spring properties configuration placeholder

我的应用程序中有两个模块:

  • 网络

core模块在​​spring/applicationContext-core.xml上下文中包含以下属性占位符配置:

<bean id="coreProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:/properties/*.properties</value>
            <value>classpath:/profiles/${build.profile.id}/properties/*.properties</value>
            <value>file:${ui.home}/profiles/${build.profile.id}/properties/*.properties</value>
        </list>
    </property>
</bean>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreResourceNotFound" value="false"/>

    <property name="properties" ref="coreProperties" />
</bean>

<bean id="propertySourcesPlaceholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

考虑到我有以下属性:

resource.suffix=.min

如果我将此值注入core @Component

@Value("${resource.suffix}")
private String resourceSuffix;

该属性已妥善解决。

但是,如果我在web模块中的bean中添加相同的配置,它只是加载核心配置:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/servlet-context.xml /WEB-INF/application-security.xml
        classpath*:/spring/applicationContext-core.xml</param-value>
</context-param>

然后该属性未解析,resourceSuffix值设置为以下字符串文字值${resource.suffix

我错过了什么?

1 个答案:

答案 0 :(得分:2)

我认为这与spring如何使用前/后处理器有关。

基本上,您可以使用重复定义或使用不同的机制来加载属性。

据我所知,在春季3.1之前复制是唯一的方法。

更多关于http://www.baeldung.com/2012/02/06/properties-with-spring/#parent-child