Несколько свойств-заполнителей с перекрывающимися местами не работает?

1

У меня есть три файла свойств:

Файл 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?

  • 0
    Зачем это Как только он заменен, он заменяется. Если первый заполнитель выполнил свою работу, заменить нечего.
Теги:
spring

2 ответа

1
Лучший ответ

Наличие нескольких конфигураторов-заполнителей не работает так, как вы предполагали. Нет функции переопределения свойств. Первый пытается и заменяет то, что может, затем следующий имеет шанс с тем, что осталось, и так далее. Если вы хотите переопределить свойства, вы можете лучше определить компонент свойств с несколькими источниками, такими как:

<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" /> 
  • 0
    Спасибо, кажется, вы и М.Дейнум правы. Но как я могу переопределить / расширить поведение свойства-заполнителя, определенного в производственном applicationContext, только для моих тестов?
  • 0
    Это не поведение самого заполнителя-конфигуратора. Я думаю, что вы бы лучше выразили, что на самом деле хотите сделать, более подробно в новом вопросе с более подробной информацией о конфигурации.
0

Applicationcontext2 переопределяет applicationcontext1.

Чтобы подтвердить добавление одной новой переменной в file1.prop который не должен быть доступен в двух других файлах file2 и file3.

  • 0
    Я добавил новое свойство в file1, и оно было введено в класс, поэтому applicationContext2 не переопределяет applicationcontext1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню