代码之家  ›  专栏  ›  技术社区  ›  Candy Chiu

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

  •  0
  • Candy Chiu  · 技术社区  · 15 年前

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

    proj-a和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-a.properties"/>
        <bean ... someProperty="${property-a}" />
    </bean>
    

    项目属性

    property-a=hello-a
    

    <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>
    

    项目属性

    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 回复  |  直到 15 年前
        1
  •  1
  •   Candy Chiu    15 年前

    我发现一个解决方案-将属性IgnoreUnsolvablePlaceholders设置为true。