我有一个包含多个模块的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"/>
答案 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中解压缩所需的属性文件。
希望这有帮助。