Профили Spring и Maven
Несмотря на одинаковое слово, эти профили работают в разное время.
| Maven profile | Spring profile | |
|---|---|---|
| Когда | при сборке | при запуске контекста |
| Что меняет | зависимости, плагины, ресурсы, параметры build | набор бинов и runtime properties |
| Результат | могут получиться разные артефакты | один артефакт запускается по-разному |
| Активация | -P... и условия Maven | spring.profiles.active и настройки окружения |
Предпочтение
Для различий окружений обычно удобнее собрать один неизменяемый артефакт и передать runtime-конфигурацию при развёртывании. Иначе сложно доказать, что протестирован тот же бинарник, который ушёл в production.
Maven profile оправдан, если действительно меняется сборка: специальный plugin, platform-specific packaging или отдельный набор интеграционных тестов.
Spring profile уместен для крупных групп бинов. Мелкие feature flags и значения лучше выражать отдельными properties, иначе комбинации профилей быстро становятся неуправляемыми.
Вопросы для повторения
- Может ли Spring активировать Maven profile во время запуска? Нет, сборка уже завершена.
- Почему один артефакт лучше нескольких? Меньше различий между протестированным и развёрнутым кодом.
- Где хранить пароли? Во внешнем secret-хранилище/переменной окружения, не в profile-файле репозитория.
- Когда Maven profile уместен? Когда меняется именно процесс или результат сборки.
Связано: Conditional и Profile, Основы иcпользования Maven, Конфигурация и сборка Spring приложения.