2

我的 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 实例触发,而不会为第二个实例触发。有没有人有类似的设置,可以给我一些建议?

谢谢,

塞巴斯蒂安

4

2 回答 2

0

好的,我自己解决了这个问题,尽管我不明白为什么这会如此奇怪。我在第二个占位符 (?{ 而不是 ${) 中定义了一个不同的前缀,现在它可以工作了。我曾预计这将在没有任何特殊前缀的情况下工作......

于 2012-08-28T15:31:47.083 回答
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

于 2013-08-02T12:59:16.520 回答