В настоящее время мы пишем приложение, которое разбито на несколько проектов / модулей. Например, возьмем следующие модули:
- 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 ..
источник
ignore-unresolvable="true"
, иначе нужно.ignoreUnresolvablePlaceholders
? Что такое неразрешимые заполнители?PropertySourcesPlaceholderConfigurer
является реализацией поддержки по умолчанию, начиная с Spring 3.1, поэтому его разумно использовать вместоPropertyPlaceholderConfigurer
класса реализации bean-компонента.Я знаю, что это старый вопрос, но этот
ignore-unresolvable
объект у меня не работал, и я не знал, почему.Проблема заключалась в том, что мне нужен внешний ресурс (что-то вроде
location="file:${CATALINA_HOME}/conf/db-override.properties"
), иignore-unresolvable="true"
в этом случае он не работает.Что нужно сделать, чтобы игнорировать отсутствующий внешний ресурс:
На всякий случай кто-нибудь еще столкнется с этим.
источник
ignore-unresolvable
иignore-resource-not-found
служат разным целям. Чтобы предотвратить ошибки, когда файл свойств не существует, используйтеignore-resource-not-found="true"
. Чтобы предотвратить ошибки при использовании свойства, которого нет в файле , используйтеignore-unresolvable="true"
. Если у вас есть несколько файлов, каждый из которых содержит частичные наборы свойств, и каждый файл может существовать или не существовать, вам нужно будет использовать оба.Вы можете иметь несколько
<context:property-placeholder />
элементов вместо явного объявления нескольких bean-компонентов PropertiesPlaceholderConfigurer.источник
PropertiesPlaceholderConfigurer
Фасоль имеет альтернативное свойство «propertiesArray». Используйте это вместо свойства «свойства» и настройте его с помощью<array>
ссылок на свойства.источник
Я попробовал решение ниже, оно работает на моей машине.
источник: http://www.baeldung.com/2012/02/06/properties-with-spring/
источник