Как выглядит Spring свойства / приоритет работает?

Я боролся с этим в течение некоторого времени. Я гуглил и пробовал несколько вещей, но все, что я нашел, не могло решить мою проблему.

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" ref="propertiesLocations" />
        <property name="searchSystemEnvironment" value="true" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    </bean>

И это то, что я имею в качестве своих свойств.

<beans profile="">
    <util:list id="propertiesLocations">
        <value>classpath:com/lala/project/configuration/core.properties
        </value>
        <value>classpath*:com/lala/project/**/configuration/*.properties
        </value>
        <value>classpath*:com/lala/project/**/test/configuration/*.properties
        </value>
        <value>classpath*:project.properties
        </value>
    </util:list>
</beans>

<beans profile="test">
    <util:list id="propertiesLocations">
        <value>classpath:com/lala/project/configuration/core.properties
        </value>
        <value>classpath*:com/lala/project/**/configuration/*.properties
        </value>
        <value>classpath*:com/lala/project/**/test/configuration/*.properties
        </value>
        <value>classpath*:project-test.properties
        </value>
        <value>classpath*:project.properties
        </value>
    </util:list>
</beans>

<beans profile="testing">
    <util:list id="propertiesLocations">
        <value>classpath:com/lala/project/configuration/core.properties
        </value>
        <value>classpath*:com/lala/project/**/configuration/*.properties
        </value> <!-- production properties -->
        <value>classpath*:com/lala/project/**/test/configuration/*.properties <!-- test properties -->
        </value>
        <value>classpath*:project-testing.properties
        </value>
        <value>classpath*:project.properties
        </value>
    </util:list>
</beans>

И затем, в одном из моих подпроектов, у меня есть 2 файла свойств, мои "производственные" свойства в

SRC / главный / ресурсы / ком / Лал / проект / subproject1 / subprojectA / конфигурация / myProperties.properties

и мои "тестовые" свойства под

SRC / тест / ресурсы / ком / Лал / проект / subproject1 / subprojectA / тест / конфигурация / myProperties.properties

Очевидно, что эти файлы имеют почти одинаковые имена свойств с разными значениями. Я хотел бы знать, почему мои тесты в подпроекте A продолжают собирать мои "производственные" свойства вместо моих "тестовых" свойств? Другими словами, почему Spring не берет мои "тестовые" свойства и не переопределяет мои "производственные свойства"?

Я забыл упомянуть, что не могу просто стереть местоположение "производственных" свойств для своего тестового профиля, так как мне нужны производственные свойства из других проектов, подпроектов.

2 ответа

Решение

Я просто публикую свой ответ на тот случай, если кто-нибудь столкнется с подобной проблемой.

Как я правильно понял, приоритет для расположения файлов свойств работает вниз. Другими словами, местоположение внизу имеет / имеет наибольший приоритет.

НО проблема была не в приоритете поиска, а в способе его поиска. Кажется, что Spring не любит эти две строки:

    <value>classpath*:com/lala/project/**/configuration/*.properties
    </value>
    <value>classpath*:com/lala/project/**/test/configuration/*.properties
    </value>

После долгих экспериментов я пришел к выводу, что, поскольку маршруты / местоположения, соответствующие второму регулярному выражению, также соответствуют первому, они учитываются первой строкой, а затем не учитываются во второй строке (I' Я думаю, что процесс поиска, как он обрабатывает строку за строкой сверху вниз).

В итоге я изменил расположение моих тестовых свойств

    <value>classpath*:com/lala/project/**/test/configuration/*.properties
    </value>

что-то вроде

    <value>classpath*:com/lala/project/**/configuration/test/*.properties
    </value>

Попробуйте изменить путь свойств теста следующим образом:

file:src/test/resources/com/lala/project/configuration/core.properties
Другие вопросы по тегам