Использование нескольких файлов свойств (через PropertyPlaceholderConfigurer) в нескольких проектах / модулях - PullRequest
97 голосов
/ 04 августа 2010

В настоящее время мы пишем приложение, которое разбито на несколько проектов / модулей. Например, возьмем следующие модули:

  • MYAPP-DAO
  • MYAPP-болтовня

Каждый модуль имеет свой собственный XML-файл контекста Spring. Для модуля DAO у меня есть PropertyPlaceholderConfigurer, который читает файл свойств с необходимыми параметрами соединения БД. В модуле jabber у меня также есть PropertyPlaceHolderConfigurer для свойств соединения jabber.

Теперь идет основное приложение, которое включает в себя myApp-DAO и myApp-jabber. Он читает все файлы контекста и запускает один большой контекст Spring. К сожалению, кажется, что в каждом контексте может быть только один PropertyPlaceholderConfigurer, поэтому любой загружаемый модуль может прочитать его параметры соединения. Другая выдает исключение с ошибкой типа «Не удалось разрешить заполнитель« jabber.host »»

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

Как мне настроить каждый модуль так, чтобы каждый мог загрузить свой собственный файл свойств? Прямо сейчас я переместил PropertyPlaceHolderConfigurer из отдельных контекстных файлов и объединил их в контекст основного приложения (загрузив все файлы свойств с помощью одного PropertyPlaceHolderConfigurer). Это отстой, хотя, потому что теперь каждый, кто использует модуль dao, должен знать, что им нужен PropertyPlaceHolderConfigurer в их контексте ... а также интеграционные тесты в модуле dao и т.д.

Мне любопытно услышать о решениях / идеях от сообщества stackoverflow ..

Ответы [ 5 ]

177 голосов
/ 04 августа 2010

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

<context:property-placeholder
location="classpath:dao.properties,
          classpath:services.properties,
          classpath:user.properties"
ignore-unresolvable="true"/>

или

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:dao.properties</value>
                <value>classpath:services.properties</value>
                <value>classpath:user.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>
18 голосов
/ 24 октября 2013

Я знаю, что это старый вопрос, но свойство ignore-unresolvable не работало для меня, и я не знал, почему.

Проблема заключалась в том, что мне был нужен внешний ресурс (что-то вроде location="file:${CATALINA_HOME}/conf/db-override.properties"), а ignore-unresolvable="true" не выполняет работу в этом случае.

Что нужно сделать для игнорирования отсутствующего внешнего ресурса:

ignore-resource-not-found="true"

На всякий случай, если кто-нибудь еще столкнется с этим.

8 голосов
/ 04 августа 2010

Вы можете иметь несколько элементов <context:property-placeholder /> вместо явного объявления нескольких компонентов PropertiesPlaceholderConfigurer.

4 голосов
/ 04 августа 2010

Боб PropertiesPlaceholderConfigurer имеет альтернативное свойство, называемое "propertiesArray".Используйте это вместо свойства «properties» и настройте его для <array> ссылок на свойства.

1 голос
/ 27 мая 2016

Я попробовал решение, приведенное ниже, оно работает на моем компьютере.

<context:property-placeholder location="classpath*:connection.properties" ignore-unresolvable="true" order="1" />

<context:property-placeholder location="classpath*:general.properties" order="2"/>

Если в контексте Spring присутствует несколько элементов, следует придерживаться нескольких рекомендаций:

атрибут порядка должен быть указан, чтобы зафиксировать порядок, в котором они обрабатываются Spring, у всех заполнителей свойств минус последний (самый высокий порядок) должен иметь ignore-unresolvable=”true”, чтобы механизм разрешения передавался другим вконтекст без исключения

источник: http://www.baeldung.com/2012/02/06/properties-with-spring/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...