14

假设我有一个配置:

    <bean id="batchJobProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>first.properties</value>
            <value>second.properties</value>
        </list>
    </property>
</bean>

first.properties 具有属性“my.url=first.url” second.properties 具有属性“my.url=second.url”

那么哪个值将被注入“myUrl”bean?是否有任何已定义的属性解析顺序?

4

2 回答 2

23

PropertiesLoaderSupport.setLocation的 javadoc状态

设置要加载的属性文件的位置。

可以指向经典属性文件或遵循 JDK 1.5 的属性 XML 格式的 XML 文件。

注意:如果键重叠,以后文件中定义的属性将覆盖先前文件中定义的属性。因此,请确保最具体的文件是给定位置列表中的最后一个文件。

所以 second.properties 中 my.url 的值会覆盖 first.properties 中 my.url 的值。

于 2013-01-07T08:49:47.107 回答
8

最后一个获胜。

假设我们有 props1.properties 作为

prop1=val1

和 props2.properties

prop1=val2

和 context.xml

<context:annotation-config />
<bean id="batchJobProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/props1.properties</value>
            <value>/props2.properties</value>
        </list>
    </property>
</bean>
<bean class="test.Test1" /> 

然后

public class Test1 {
    @Value("${prop1}")
    String prop1;

    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/test1.xml");
        System.out.println(ctx.getBean(Test1.class).prop1);
    }

}

印刷

val2

如果我们将上下文更改为

        <list>
            <value>/props2.properties</value>
            <value>/props1.properties</value>
        </list>

相同的测试打印

val1
于 2013-01-07T09:19:10.277 回答