将属性文件添加到预先存在的PropertyPlaceholderConfigurer

时间:2014-06-11 15:35:12

标签: java spring properties

我有一个项目,我已经分成几个子项目,所以这将是层次结构

parent
  -project A
  -project B

现在在项目A中我定义了我的属性文件:

  <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties" ref="myProperties" />
        <property name="systemPropertiesModeName">
            <value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value>
        </property>
    </bean>
    <bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:file1.properties</value>
                <value>classpath:file2.properties</value>
                <value>classpath:file3.properties</value>
            </list>
        </property>
    </bean>

现在我的项目B也需要一个属性文件,我觉得这个属性文件属于B子项目。如何将此属性文件“合并”到propertyPlaceHolderConfigurer bean中,而不从项目A替换以前加载的属性文件?

1 个答案:

答案 0 :(得分:2)

将子模块的属性文件放在src / main / resources / META-INF中,以便您可以从父级加载它们,如下所示:

<bean id="propertyPlaceholderConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="locations">
        <list>
            <value>classpath*:parent1.properties</
            <value>classpath*:parent2.properties</value>

            <!-- loads all submodules property-files --!>
            <value>classpath*:/META-INF/*.properties</value> 
        </list>
    </property>
</bean>

从春天documentation

  

&#34;类路径*:&#34;前缀也可以与位置路径的其余部分中的PathMatcher模式组合,例如&#34;类路径*:META-INF / * - 的beans.xml&#34 ;. [...]

     

请注意&#34;类路径*:&#34;与Ant样式模式结合使用时,只能在模式启动前与至少一个根目录一起可靠地工作,除非实际目标文件驻留在文件系统中。这意味着像&#34; 。类路径*:* XML&#34;不会从jar文件的根目录中检索文件,而只能从扩展目录的根目录中检索文件。 [...]