Статьи

Профили Spring 3.1 и конфигурация Tomcat

В Spring 3.1 появилась очень полезная функция, называемая профилями . Благодаря этому легко создать один пакет, который можно развернуть во всех средах (разработка, тестирование, производство и т. Д.).

Определяя системное свойство 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'?>
 
 
 
 
    <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 Мачея Уоковяка в блоге « Путь к разработке программного обеспечения» .