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

Одно и то же свойство задано в application.yml, в переменной окружения и аргументом командной строки. Какое значение победит?

MiddleSpring Boot и ActuatorSpring Boot
Ещё спрашивают так:
  • Какой источник настроек Spring Boot сильнее?
Коротко

Победит аргумент командной строки. Порядок (сильнее → слабее): командная строка → системные свойства JVM → переменные окружения → профильные файлы → application.yml → значения по умолчанию.

  • Файлы снаружи jar сильнее файлов внутри
  • Профильный файл сильнее общего
  • Итог и источник каждого значения — /actuator/env

А ещё Поэтому в контейнере настраивают переменными окружения

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

Подробно

Spring Boot собирает свойства из упорядоченного набора источников, и более внешний источник перекрывает более внутренний — логика в том, чтобы конфигурацию можно было переопределить при развёртывании, не пересобирая артефакт. Внутри файлов действует своя иерархия: файлы вне jar важнее упакованных, а профильные важнее общих. Полезно знать про relaxed binding: переменная окружения SPRING_DATASOURCE_URL соответствует свойству spring.datasource.url, потому что подчёркивания и регистр приводятся к общему виду. Проверить фактический источник значения можно эндпоинтом Actuator /actuator/env, что здорово экономит время при разборе неожиданной конфигурации.

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

  • Ответ и порядок источников.
  • Практический вывод для контейнеров.

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

  • Держать секреты в application.yml вместо внешних источников.
  • Забывать про профильные файлы при отладке «неправильного» значения.

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

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

Показать варианты и ответ
  • ✓Аргумент командной строки: он выше переменных окружения, а те выше файлов конфигурации
  • ✗Значение из application.yml как из основного файла конфигурации
  • ✗Переменная окружения — она задаётся ближе всего к среде исполнения
  • ✗Порядок не определён, побеждает прочитанное последним

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

  • Как переменная окружения отображается в имя свойства?
  • Чем @ConfigurationProperties удобнее набора @Value?

Разбор темы

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

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

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

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

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