在spring中合并两个模块的属性文件

时间:2016-02-02 19:43:16

标签: java xml spring maven properties

我有一个包含多个模块的Maven项目。模块ModuleB使用ModuleA作为内部Maven依赖项。在moduleA中,我有一个Spring xml config module.a.xml,用于加载module.a.properties文件。在moduleB的Spring xml配置中,我将module.b.properties文件与module.a.xml配置一起导入。

最后,我得到了一个带有两个属性文件导入的Spring xml配置。根据导入的顺序,我只能访问一个文件的属性:module.a.properties或module.b.properties。我怎样才能同时使用这两个属性?

使用PropertyPlaceholderConfigurer的解决方案的问题是属性文件驻留在不同的模块中,而moduleB不应该担心moduleA的属性文件。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="corePlaceHolder">
    <property name="locations">
        <list>
            <value>classpath:modula.a.properties</value>
            <value>classpath:modula.b.properties</value>
        </list>
    </property>
</bean>   

使用ignore-unresolvable="true"的问题在于,很容易错过遗忘的财产,并且很容易错过ignore-unresolvable="true" property-placeholder

<context:property-placeholder location="module.a.properties" order="0" ignore-unresolvable="true"/>
<context:property-placeholder location="module.b.properties" order="1" ignore-unresolvable="true"/>

1 个答案:

答案 0 :(得分:0)

不确定这可以解决您的问题,但是,由于您正在使用maven多模块构建,您是否考虑过使用maven插件创建第三个属性文件作为A和B的合并以及正确的覆盖策略?

以下是使用maven-merge-properties-plugin

的示例
<plugin>
  <groupId>org.beardedgeeks</groupId>
  <artifactId>maven-merge-properties-plugin</artifactId>
  <version>0.2</version>
  <configuration>
    <merges>
      <merge>
        <targetFile>${moduleB.output.dir}/module-final.properties</targetFile>
        <propertiesFiles>
          <propertiesFile>${moduleB.src.dir}/moduleB.properties</propertiesFile>
          <propertiesFile>${moduleA.src.dir}/moduleA.properties</propertiesFile>
        </propertiesFiles>
      </merge>
    </merges>
  </configuration>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>merge</goal>
      </goals>
    </execution>
  </executions>
</plugin>

通过这种方式,您将获得所有A和B属性。如果A和B都存在属性,则B将获胜(检查配置中的文件顺序)。

同一个项目中的两个模块检索这两个文件应该非常简单。 您甚至可以使用另一个插件从外部jar中解压缩所需的属性文件。

希望这有帮助。