Spring Boot
Теория: Профили
Приложения, разрабатываемые программистами, запускаются в разных окружениях (или, как говорят, средах), которые требуют разных настроек для своей работы. Например, локально, на своей машине разработчик может использовать одну базу данных, а в продакшене другую. То же самое касается настроек логирования, правил безопасности и всех остальных аспектов работы приложения.
Возможность иметь свои наборы параметров под разные окружения в Spring Boot реализуется с помощью механизмов профайлов (Profiles). С помощью профайлов мы можем включать специфические бины или параметры конфигурации без необходимости изменения исходного кода.
Среды разработки
Как минимум выделяют две среды разработки:
- Продакшен (Production). Место, где запускается проект для его реальной работы. Как правило, это происходит в облаках Amazon, Yandex или Google.
- Девелопмент (Development). Почти всегда локальная машина разработчика. Обычно среда одна, даже если разработчиков больше одного человека.
Кроме указанных, часто, добавляют среду Staging. Это предпродакшен среда, где имитируется окружение, максимально приближенное к продакшену. Эту среду используют для тестирования приложения перед тем как выполнить его деплой на продакшен.
Итого, в типовых ситуациях, мы можем говорить о трех средах, для которых в Spring Boot будут определены три профайла:
- production
- development
- staging
Активация профайла
Активация профайла выполняется двумя основными способами.
-
С помощью переменной окружения
SPRING_PROFILES_ACTIVE -
С помощью аргумента во время запуска приложения
Формирование профайла
Аннотация @Profile указанная для @Component или @Configuration указывает на то, что эти классы должны использоваться только в определенном окружении:
Таким образом можно реализовать подмену как настроек, так и реализацию каких-то классов.
Конфигурационные параметры предпочтительно подменять с помощью файлов, специфичных для своих профилей: application-{profile}.yml расположенных рядом с оригинальным application.yml. Например:
- application-production.yml
- application-staging.yml
Наличие файлов специфичных для разных окружений не отменяет наличие общего application.yml, в котором полезно оставлять общие настройки, чтобы не дублировать их в каждом профайле.



