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

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

  • myApp-DAO
  • myApp-jabber

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

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

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

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

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

98
задан black666 28 September 2012 в 12:03
поделиться

3 ответа

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

<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>
177
ответ дан 24 November 2019 в 05:13
поделиться

Вы можете иметь несколько элементов вместо явного объявления нескольких bean-компонентов PropertiesPlaceholderConfigurer.

8
ответ дан 24 November 2019 в 05:13
поделиться

Bean PropertiesPlaceholderConfigurer имеет альтернативное свойство, называемое propertiesArray. Используйте это вместо свойства «свойства» и настройте его с помощью <массив> ссылок на свойства.

4
ответ дан 24 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: