从工作区中的项目加载多个属性文件

时间:2010-07-10 08:06:41

标签: spring

我有三个项目 - proj-a,proj-b和main,主要依赖于proj-a和proj-b。

proj-a和proj-b每个都包含一个module-context.xml和属性文件。

proj-a module-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:property-placeholder location="classpath:/META-INF/proj-a.properties"/>
    <bean ... someProperty="${property-a}" />
</bean>

proj-a.properties

property-a=hello-a
除了a被b替换之外,

proj-b的配置是相同的。

proj-b module-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:property-placeholder location="classpath:/META-INF/proj-b.properties"/>
    <bean ... someProperty="${property-b}" />
</bean>

proj-b.properties

property-b=hello-b

main中的一个类想要创建一个由proj-a和proj-b的module-context.xml组成的ApplicationContext。问题是spring只处理了一个属性文件。如果首先加载proj-a的module-context.xml,则永远不会读取proj-b的属性文件。

以下代码段会抛出异常。

public static void main( String[] args ) throws IOException {

    ApplicationContext context = new FileSystemXmlApplicationContext( new String[] { 
            "../proj-a/src/main/resources/META-INF/spring/module-context.xml",
            "../proj-b/src/main/resources/META-INF/spring/module-context.xml"
    } );
}

引发

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name '...' defined in file [...\proj-b\src\main\resources\META-INF\spring\module-context.xml]: Could not resolve placeholder 'property-b'
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:272)
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:624)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:599)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:398)

如何正确加载属性文件?合并它们不是解决方案,因为属性是项目特定的。

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案 - 将属性ignoreUnresolvablePlaceholders设置为true。