Spring解析的属性文件位置需要解析这些属性

时间:2015-04-21 16:58:54

标签: java spring properties configuration config

我正在使用Spring版本4.0.6.RELEASE并尝试从属性文件中读取spring并使用其中一个已解析的属性为另一个属性文件提供位置。我的spring.xml文件包含以下内容:

    <bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:application.properties</value>
            <value>classpath:version.properties</value>
            <!- The below file contains the another file location -->
            <value>file:${catalina.base}/conf/instance.properties</value>
            <value>${another.file.location}</value>

        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true"/>
</bean>

instance.properties包含:

account.id=BlahBlahBlah
another.file.location=file:/Users/beardman/.myapp/local.properties

和/Users/beardman/.myapp/local.properties包含:

magic.number=3
database.endpoint=blah

我一直收到以下警告:

WARN  [main] o.s.b.f.c.PropertyPlaceholderConfigurer Could not load properties from ServletContext resource [/${another.file.location}]: Could not open ServletContext resource [/${another.file.location}]

调试我的代码时,我可以看到account.id被正确注入,但我永远无法显示magic.number或database.endpoint。如何让spring使用instance.properties文件中的resolved属性作为another.file.location的值?

编辑:添加了属性文件内容

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring将属性占位符替换为系统属性。由于您还想使用外部文件中定义的属性,因此需要创建PropertyPlaceholderConfigurer
此标记是简写,但如果需要更多控制,可以将PropertyPlaceholderConfigurer定义为bean。在applicationProperties bean之前添加它

<context:property-placeholder location="file:${catalina.base}/conf/instance.properties"/>

请注意,文件中的属性将覆盖默认模式下的系统属性。您可以通过将属性systemPropertiesMode="override"添加到property-placeholder元素

来指定首先检查系统属性