Что такое запрос разрешения свойств в конфигурации Springholder placeholder с несколькими местоположениями?
Допустим, у меня есть конфигурация:
<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"
Итак, какое значение будет введено в bean-компонент myUrl? Есть ли определенный порядок разрешения свойств?
Ответы
Ответ 1
Состояние javadoc для свойствLoaderSupport.setLocation
Задайте местоположение файлов свойств, которые необходимо загрузить.
Может указывать на классические файлы свойств или файлы XML, которые следуют за XML-форматом JDK 1.5.
Примечание. Свойства, определенные в более поздних файлах, переопределяют свойства, определенные ранее файлами, в случае перекрытия ключей. Следовательно, убедитесь, что наиболее конкретные файлы являются последними в данном списке местоположений.
Таким образом, значение my.url в second.properties переопределит значение my.url в first.properties.
Ответ 2
Последний выигрывает.
Предполагая, что у нас есть 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