Получить доступ

Зачем нужны Spring profiles?

MiddleApplicationContext и конфигурацияSpring Boot
Ещё спрашивают так:
  • Как настроить разные конфигурации для dev и prod?
Коротко

Профили включают разные бины и свойства под окружение: @Profile("dev") на бине, application-prod.yml для свойств, активация через spring.profiles.active.

  • application-{profile}.yml переопределяет application.yml
  • Активные профили: переменная SPRING_PROFILES_ACTIVE, аргумент, тест — @ActiveProfiles
  • Группы профилей (spring.profiles.group) с Spring Boot 2.4

А ещё Секреты не кладут в профильные файлы — переменные окружения и менеджер секретов

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Бины по профилю: @Profile("dev") на @Component или @Bean — бин создаётся, только если профиль активен; @Profile("!prod") — во всех, кроме prod. Пример: заглушка платёжного шлюза в dev, настоящий клиент в prod.

Свойства по профилю: application-dev.yml, application-prod.yml загружаются поверх application.yml, если профиль активен. В одном файле — несколько документов через --- и spring.config.activate.on-profile (Spring Boot 2.4+).

Активация:

  • spring.profiles.active=prod в переменной окружения SPRING_PROFILES_ACTIVE, аргументе --spring.profiles.active=prod;
  • в тестах — @ActiveProfiles("test");
  • spring.profiles.group.prod=prod-db,prod-mq — группы.

Практика: не плодить профили под каждый стенд — значения, которые различаются между окружениями (URL, пароли), передают переменными окружения, а профили используют для включения и выключения бинов и поведения. Секреты — не в репозитории.

Что хотят услышать

  • Профили для бинов и для свойств.
  • Способы активации.
  • Практика: что в профили, а что в переменные окружения.

Частые ошибки

  • Хранить пароли prod в application-prod.yml в репозитории.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Ускорять старт приложения
  • ✓Активировать разные наборы бинов и настроек под окружение (dev/test/prod)
  • ✗Управлять памятью JVM
  • ✗Полностью заменять Maven-профили

Что спросят дальше

  • Как задать активный профиль?
  • Что такое application-{profile}.yml?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем