创建PropertyPlaceHolderConfigurer的多个实例 - Spring

时间:2015-07-17 09:20:02

标签: java spring configuration spring-bean

我在应用程序服务器(glassfish)中部署了2个不同的应用程序。一个是jar文件,另一个是war应用程序。两个应用程序都引用单个属性文件(data.properties)。为了读取属性文件,我在相应的上下文文件(business-beans.xml和applicationContext.xml)中创建了一个Springs PropertyPlaceholderConfigurer 的实例。部署应用程序后,我可以在一个应用程序中加载属性文件,而另一个Web应用程序抛出"无法解决占位符' sw.throttle.enable'

问题 -

  1. 如何解决问题?
  2. 在两个位置加载相同的属性文件是否不正确?
  3. 有没有办法在一个上下文中加载属性文件,而在另一个bean定义文件中使用第一个的引用?
  4. business.beans的SnapShot

    <bean   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="placeholderPrefix" value="${sw." />
        <property name="location"  value="file:///etc/data.properties" />
        <property name="ignoreResourceNotFound" value="true" />
    </bean>
    

    在business.beans中引用的属性如下

     <bean id="mService" class=" com.test.business.mService">
             <property name="throttlingEnabled" value="${sw.throttle.enable}"/>
        </bean>
    

    applicationContext.xml快照

    <bean   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
            <property name="placeholderPrefix" value="${sw." />
            <property name="location"  value="file:///etc/data.properties" />
            <property name="ignoreResourceNotFound" value="true" />
        </bean>
    

    在applicationContext.xml中引用的属性

    <bean id="downloadService" class="com.test.downloadService"
             init-method="startUp" destroy-method="shutDown"
             p:throttlingEnabled="${sw.throttle.enable}"  />
    

    包含business.beans的应用程序部署得很好,但包含applicationContext.xml的应用程序抛出运行时错误&#34;无法解析占位符sw.throttle.enable&#34;

    注意 -

    1. 这两个应用程序都部署在OsGi Context中。
    2. Spring版本是3.0.1
    3. 编辑 - applicationContext.xml有另一个bean定义如下。这可能是原因吗?

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

1 个答案:

答案 0 :(得分:1)

通过将“ignoreUnresolvablePlaceholders”设置为“true”解决了该问题。显然business.beans与问题无关

以下是解决问题的修改配置

<bean   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="placeholderPrefix" value="${sw." />
        <property name="location"  value="file:///etc/data.properties" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="ignoreUnresolvablePlaceHolders" value="true"
    </bean>

感谢StackOverflow获得答案+1