Spring 4 PropertySourcesPlaceholderConfigurer 不跨模块解析 ${..} 占位符
Spring 4 PropertySourcesPlaceholderConfigurer doesn't resolve ${..} placeholders across modules
我的应用程序中有两个模块:
- 核心
- 网络
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
.
我错过了什么?
我认为这与 spring 与 pre/post 处理器的工作方式有关。
基本上您可以重复定义或使用不同的机制来加载属性。
据我所知spring3.1复制是唯一的方法
更多关于http://www.baeldung.com/2012/02/06/properties-with-spring/#parent-child
我的应用程序中有两个模块:
- 核心
- 网络
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
.
我错过了什么?
我认为这与 spring 与 pre/post 处理器的工作方式有关。
基本上您可以重复定义或使用不同的机制来加载属性。
据我所知spring3.1复制是唯一的方法
更多关于http://www.baeldung.com/2012/02/06/properties-with-spring/#parent-child