Зачем нужны Spring profiles?
- Как настроить разные конфигурации для 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
А ещё Секреты не кладут в профильные файлы — переменные окружения и менеджер секретов
Подробно
Бины по профилю: @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 в репозитории.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Чтобы ускорять старт приложения за счёт параллельной инициализации бинов
- ✗Чтобы управлять памятью JVM, задавая разные настройки heap под окружение
- ✓Активировать разные бины и настройки под окружение (dev/test/prod)
- ✗Чтобы полностью заменить Maven-профили и собирать отдельный артефакт под стенд
Что спросят дальше
- Как задать активный профиль?
- Что такое application-{profile}.yml?
Разбор темы
- ApplicationContext и конфигурация
BeanFactory против ApplicationContext, способы конфигурации, @Configuration full/lite, профили и Environment, @Conditional.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.