几个带弹簧的PropertyPlaceholderConfigurers

时间:2012-08-28 15:21:07

标签: spring properties

我的spring bean定义有一个奇怪的问题。我的应用程序是一个多模块的东西。 目前我有一个名为core-lib的项目,它有一个spring.xml文件,定义了一个PropertyPlaceholderConfigurer,如下所示:

<bean id="corePropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="10" />
    <property name="locations">
        <list>
            <!-- default properties files containing ALL possible properties -->
            <value>classpath:default.connection.properties</value>
            <value>classpath:default.mq.properties</value>
            <!-- installation specific, optional properties file containing overridden properties -->
            <value>classpath:connection.properties</value>
            <value>classpath:mq.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true" />
</bean>

其次我有一个依赖项目,它有自己的spring.xml文件,包括core-lib项目中的一个。此外,它定义了第二个PropertyPlaceholderConfigurer:

<!-- import configuration from service layer -->
<import resource="classpath:spring.xml"/> 


<bean id="commPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="20" />
    <property name="locations">
        <list>
            <!-- properties files containing ALL possible properties -->
            <value>classpath:processing.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true" />
</bean>

现在我的行​​为是由于缺少属性而无法实例化第二个Spring PlaceholderConfigurer中定义的bean:

  

BeanDefinitionStoreException:类路径资源[comm-server.spring.xml]中定义的名称为'commServer'的bean定义无效:无法解析占位符'comm.server.CommServer.port'

如果我在PropertyPlaceholderConfigurer类中设置断点,则只会触发第一个bean实例,而不会触发第二个bean实例。有人有类似的设置,可以给我一些建议吗?

谢谢,

塞巴斯蒂安

2 个答案:

答案 0 :(得分:0)

好的,我自己解决了,虽然我不明白为什么这样做很奇怪。 我在第二个占位符中定义了一个不同的前缀(?{而不是$ {),现在它正在工作。我原本以为这可以在没有任何特殊前缀的情况下工作......

答案 1 :(得分:0)

通过定义新的占位符前缀和后缀,有一种更舒适的方式:

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>classpath:configuration.properties</value>
  </property>
  <property name="placeholderPrefix" value="myprefix{" />
  <property name="placeholderSuffix" value="}" />
</bean>

在此处找到:http://javalibs.blogspot.co.at/2008/04/java-spring-framework-multiple.html