У меня есть три файла свойств:
Файл file1.properties содержит: propA=1
Файл file2.properties содержит: propA=2 propB=2
Файл file.properties содержит: propA=3 propB=3 propC=3
И два контекста приложения:
applicationContext1.xml содержит: <context:property-placeholder location="classpath:file1.properties,classpath:file2.properties" ignore-resource-not-found="true" ignore-unresolvable="true" system-properties-mode="OVERRIDE"/>
applicationContext2.xml содержит: <context:property-placeholder location="classpath:file2.properties,classpath:file3.properties" ignore-resource-not-found="true" ignore-unresolvable="true" system-properties-mode="OVERRIDE"/>
И тест, который загружает оба контекста и вводит все свойства. MyTest.java:
@Value("${propA}")
private String propA;
@Value("${propB}")
private String propB;
@Value("${propC}")
private String propC;
И я получаю следующие значения:
propA=2
propB=2
propC=3
Почему "propA" и "propB" не были взяты из файла file3.properties?
Наличие нескольких конфигураторов-заполнителей не работает так, как вы предполагали. Нет функции переопределения свойств. Первый пытается и заменяет то, что может, затем следующий имеет шанс с тем, что осталось, и так далее. Если вы хотите переопределить свойства, вы можете лучше определить компонент свойств с несколькими источниками, такими как:
<bean name="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:conf/app-defaults.properties</value>
<value>file:${CATALINA_BASE}/conf/my-app.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true" />
</bean>
Вышеприведенный код определяет компонент свойств по умолчанию, поступающий из файла pathpath и необязательный внешний файл, который переопределяет значения по умолчанию и находится в установке tomcat. Затем вы можете использовать заполнитель свойств, например:
<context:property-placeholder properties-ref="appProperties" />
Applicationcontext2
переопределяет applicationcontext1
.
Чтобы подтвердить добавление одной новой переменной в file1.prop
который не должен быть доступен в двух других файлах file2 и file3.