Я расширил GenericXmlContextLoader
public class MyContextLoader extends GenericXmlContextLoader {
и перегрузил метод
protected String[] generateDefaultLocations(Class<?> clazz)
, чтобы собратьимена конфигурационных файлов каталога, которые я могу указать с помощью SystemProperty (-Dtest.config =).
Я также изменил метод follwowing, чтобы НЕ изменять какие-либо местоположения
@Override
protected String[] modifyLocations(Class<?> clazz, String... locations) {
return locations;
}
Я использую этот загрузчик контекста, как этотИсходный код файлов конфигурации позволяет вам теперь использовать совершенно разные конфигурации.
Использование SystemProperty - это, конечно, только одна стратегия для определения местоположения конфигурации.Вы можете делать все, что захотите, в generateDefaultLocations()
.
РЕДАКТИРОВАТЬ:
Это решение позволяет вам использовать различные конфигурации контекста приложения (например, для фиктивных объектов).) и не только разные свойства.Вам не нужен шаг сборки, чтобы развернуть все в вашем местоположении "classpath".Моя конкретная реализация также использовала имя пользователя по умолчанию для поиска каталога конфигурации (src / test / resources / {user}), если не задано системное свойство (упрощает поддержку определенных сред тестирования для всех разработчиков проекта).
Использование PropertyPlaceholder все еще возможно и рекомендуется.
РЕДАКТИРОВАТЬ :
Версия Spring 3.1.0 будет поддерживать XML-профили / абстракция среды , что аналогично моему решению и позволит выбирать файлы конфигурации для различных сред / профилей.