Определяя системное свойство spring.profiles.active Spring позволяет нам создавать различные bean-компоненты в зависимости от имени активного профиля, используя конфигурацию XML или аннотацию @Profile . Как мы все знаем, системные свойства могут использоваться в файлах Spring XML, и мы воспользуемся этим.
В этой статье я покажу, как использовать профили Spring для создания одного пакета для всех сред и как запустить его на Apache Tomcat.
Пример архитектуры
Я думаю, что наиболее распространенная и востребованная архитектура — это когда приложения, развернутые в dev, test и production, отличаются только используемым файлом свойств, содержащим конфигурацию. WAR содержит конфигурацию для всех сред, и во время выполнения выбирается правильная. Так что лучше всего, если в ресурсах приложения есть файлы вроде:
1
2
3
4
5
6
|
src main resources - config_dev.properties - config_production.properties ... |
Настройка заполнителя Spring
Для загрузки файлов свойств в Spring мы используем аннотацию <context:property-placeholder />
или @PropertySource . В моем примере я буду следовать подходу конфигурации XML для загрузки файла свойств:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<? xml version = '1.0' encoding = 'UTF-8' ?> xsi:schemaLocation='http://www.springframework.org/schema/beans < context:property-placeholder location = 'classpath:config_${spring.profiles.active}.properties' /> </ beans > |
Настройка Tomcat
Теперь пришло время сообщить Tomcat, какой профиль активен. Есть хотя бы способы сделать это:
- определение контекста param в web.xml — который нарушает выражение «один пакет для всех сред». Я не рекомендую
- определение системного свойства -Dspring.profiles.active = your-active-profile
Я считаю, что определение системного свойства является гораздо лучшим подходом. Итак, как определить системное свойство для Tomcat? В Интернете я мог найти много советов, таких как «преобразуйте catalina.sh», потому что вы не найдете никакого файла конфигурации для подобных вещей. Модификация catalina.sh — грязное несуществующее решение. Есть лучший способ сделать это.
Просто создайте файл setenv.sh в каталоге bin Tomcat с содержимым:
1
|
JAVA_OPTS= '$JAVA_OPTS -Dspring.profiles.active=dev' |
и он будет загружен автоматически во время запуска catalina.sh или запуска.
Вывод
Используя профили Spring, мы можем создавать гибкие приложения, которые могут быть развернуты в нескольких средах. Чем он отличается от профилей Maven ? С Maven человек, который создавал приложение, должен был определить, в какой среде он должен был работать. С помощью подхода, описанного выше, среда решает вопрос о его разработке, тестировании или производстве. Благодаря этому мы можем использовать один и тот же WAR-файл и использовать его везде.
Ссылка: профили Spring 3.1 и конфигурация Tomcat от нашего партнера по JCG Мачея Уоковяка в блоге « Путь к разработке программного обеспечения» .