如何在Spring中从不同位置正确加载多个属性文件?

时间:2015-10-04 08:40:04

标签: java spring

正如我所看到的,已经有很多关于Spring的属性的问题,但我想要实现的是有点不寻常。

假设我在类路径上有cp.prop.file.properties

external.prop.file.path=file:./path/to/external.prop.file.properties

现在,如果在我的春天上下文中,我将宣布类似这样的内容

<context:property-placeholder location="classpath:cp.prop.file.properties" />
<context:property-placeholder location="${external.prop.file.path}" />

我认为它无法正常工作。我目前无法检查。

我相信我对我想要实现的目标的意图是相当清楚的。一般来说,我希望有一些属于构建依赖的属性,并且不可配置,有些属性可配置且外部化。并且在构建期间定义了后者的路径。

3 个答案:

答案 0 :(得分:1)

您可以使用以下语法

加载多个属性文件
    <context:property-placeholder 
               location="classpath:a.properties, file:/path/to/myConfigFile.properties"
               ignore-unresolvable="true"/>

答案 1 :(得分:0)

从以下解决方案中使用

<context:property-placeholder
    location="classpath:core-application.properties,
              classpath:core-services.properties,
              classpath:core-messages.properties"
    ignore-unresolvable="true"/>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:core-application.properties</value>
                <value>classpath:core-services.properties</value>
                <value>classpath:core-messages.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>

答案 2 :(得分:0)

我们可以使用以下XML配置来定义多个属性文件:

<context:property-placeholder location="classpath:foo.properties, ${external.prop.file.path}"/>

如果我们使用JavaConfig,那么wen可以使用它(Java 8及更高版本):

@PropertySource("classpath:foo.properties")
@PropertySource("${external.prop.file.path}")
public class PropertiesWithJavaConfig {
    //...
}

或者这个(Java 8之前的版本):

@PropertySources({
    @PropertySource("classpath:foo.properties"),
    @PropertySource("${external.prop.file.path}")
})
public class PropertiesWithJavaConfig {
    //...
}

顺便说一句,如果属性名称发生冲突,则最后读取的源优先。

更多信息hereherehere