Вернуться к статьям

Порядок приоритета конфигурации в Spring Boot: мелкий нюанс, который сломает вам вечер

12 мая 2026
2 мин чтения
Порядок приоритета конфигурации в Spring Boot: мелкий нюанс, который сломает вам вечер

Знание приоритета настроек Spring Boot спасёт от часов дебага и нервных срывов.

Если вы когда-нибудь меняли свойство в application.yml, запускали приложение, а оно упрямо игнорировало вашу волю — вы не одиноки. В Spring Boot есть чёткая иерархия источников конфигурации, и незнание её — прямой билет в ад дебага.

Как это работает (и ломает планы)

Spring Boot применяет настройки в строгом порядке: чем выше приоритет, тем больше шансов, что именно это значение попадёт в ваши бины. Иерархия выглядит так (от высшего к низшему):

  1. Аргументы командной строки (например, --server.port=9090)
  2. JNDI-атрибуты (кто их вообще использует, но они есть)
  3. Системные свойства JVM (через -D)
  4. Переменные окружения ОС (любимый способ DevOps-инженеров)
  5. Файл application-{profile}.properties/yml (профильный)
  6. Файл application.properties/yml (основной)
  7. @PropertySource на классах конфигурации (если вы такое пишете)
  8. Значения по умолчанию (через @Value с дефолтом)

Самый частый сценарий боли: вы правите application.yml, но переменная окружения SERVER_PORT уже задана на сервере — и ваше приложение упорно слушает порт 8080, а не 9090. Или коллега передал аргумент командной строки в Docker-контейнере, и вы полдня ищете, откуда берётся странное значение.

Где подвох

Проблема в том, что разработчики часто забывают о более приоритетных источниках. Особенно коварны переменные окружения: они могут быть установлены системой, CI/CD или просто забыты в сессии терминала. Ещё одна грабля — профили: если вы запускаете приложение с spring.profiles.active=prod, то application-prod.yml переопределит общие настройки, но всё равно уступит аргументам командной строки.

Как не сойти с ума

  • Всегда проверяйте активные источники через Actuator: /actuator/env покажет все значения и их происхождение.
  • Используйте префиксы вроде --spring.config.additional-location для явного указания файлов.
  • Не полагайтесь на магию: если видите неожиданное поведение — начните с проверки переменных окружения и аргументов запуска.

Комментарий студии METABYTE: Мы знаем, как бывает обидно, когда приложение игнорирует ваши настройки, словно подросток — советы родителей. Наши разработчики всегда проверяют иерархию конфигурации, чтобы вы не тратили ночи на поиск таинственного server.port. А если хотите автоматизировать управление конфигами — мы знаем, как это сделать без боли.

Порядок приоритета конфигурации Spring Boot | METABYTE — METABYTE