Профили Spring и Maven

Несмотря на одинаковое слово, эти профили работают в разное время.

Maven profileSpring profile
Когдапри сборкепри запуске контекста
Что меняетзависимости, плагины, ресурсы, параметры buildнабор бинов и runtime properties
Результатмогут получиться разные артефактыодин артефакт запускается по-разному
Активация-P... и условия Mavenspring.profiles.active и настройки окружения

Предпочтение

Для различий окружений обычно удобнее собрать один неизменяемый артефакт и передать runtime-конфигурацию при развёртывании. Иначе сложно доказать, что протестирован тот же бинарник, который ушёл в production.

Maven profile оправдан, если действительно меняется сборка: специальный plugin, platform-specific packaging или отдельный набор интеграционных тестов.

Spring profile уместен для крупных групп бинов. Мелкие feature flags и значения лучше выражать отдельными properties, иначе комбинации профилей быстро становятся неуправляемыми.

Вопросы для повторения

  1. Может ли Spring активировать Maven profile во время запуска? Нет, сборка уже завершена.
  2. Почему один артефакт лучше нескольких? Меньше различий между протестированным и развёрнутым кодом.
  3. Где хранить пароли? Во внешнем secret-хранилище/переменной окружения, не в profile-файле репозитория.
  4. Когда Maven profile уместен? Когда меняется именно процесс или результат сборки.

Связано: Conditional и Profile, Основы иcпользования Maven, Конфигурация и сборка Spring приложения.