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

Как Spring Boot работает с внешней конфигурацией?

MiddleApplicationContext и конфигурацияSpring Boot
Ещё спрашивают так:
  • Откуда Spring Boot берёт настройки?
  • Как передать настройки через переменные окружения?
Коротко

Spring Boot собирает свойства из многих источников — application.yml, профильных файлов, переменных окружения, аргументов командной строки — в единое Environment. Читают их через @Value (точечно) или @ConfigurationProperties (группой в объект).

  • Порядок: аргументы командной строки > переменные окружения > внешние файлы > файлы в jar
  • Relaxed binding: SPRING_DATASOURCE_URL = spring.datasource.url
  • Секреты — из переменных окружения или менеджера секретов, не из репозитория

А ещё spring.config.import подключает другие источники: configtree, Vault, Config Server

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

Подробно

Источники (упрощённо, от сильного к слабому): аргументы --server.port=9000, системные свойства JVM, переменные окружения, application-{profile}.yml и application.yml снаружи jar (рядом или в config/), те же файлы внутри jar. Значение из более сильного источника переопределяет слабое — поэтому в контейнере настройки задают переменными окружения, не пересобирая образ.

Relaxed binding: spring.datasource.url можно задать как SPRING_DATASOURCE_URL (переменная окружения), spring.datasource.url в yml, --spring.datasource.url в аргументах.

Чтение:

  • @Value("${payments.timeout:5s}") — одно значение с умолчанием;
  • @ConfigurationProperties(prefix = "payments") — группа настроек в типизированный объект с валидацией.

Секреты: пароли и ключи не хранят в application.yml в репозитории. Варианты: переменные окружения, spring.config.import=configtree:/run/secrets/ (файлы из Kubernetes secrets), Spring Cloud Vault, Config Server.

Отладка: /actuator/env и /actuator/configprops показывают итоговые значения и источник каждого (секреты маскируются).

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

  • Набор источников и приоритет.
  • Relaxed binding и переменные окружения.
  • @Value и @ConfigurationProperties.
  • Где хранить секреты.

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

  • Пересобирать образ ради смены настройки.
  • Хранить пароли в application.yml в git.

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

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

Показать варианты и ответ
  • ✗Только из application.properties, без переменных окружения
  • ✓Свойства из application.yml/env/аргументов с приоритетами; читаются через @Value или @ConfigurationProperties
  • ✗Конфигурация зашита в код и меняется пересборкой
  • ✗Только через системные переменные JVM

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

  • Каков порядок переопределения источников?
  • Как валидировать конфигурацию?

Разбор темы

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

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

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

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

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