Ответ вслух Middle Spring Boot и автоконфигурация обновлено

Конфигурация и секреты

Вопрос

Как вы организуете конфигурацию Spring Boot приложения для разных окружений и где храните секреты?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Собираю один артефакт для всех окружений, а различия задаю конфигурацией. В application.yml лежат значения по умолчанию, отличия окружений в профилях или, что чаще в Kubernetes, в переменных окружения: SPRINGDATASOURCEURL перекрывает spring.datasource.url.

Что должно прозвучать в ответе

  • Общий application.yml и профили для отличий

  • Переменные окружения перекрывают файлы, relaxed binding

  • @ConfigurationProperties с валидацией

  • Секреты не в репозитории: env, Vault, Kubernetes Secrets

  • Одинаковый артефакт для всех окружений

Что могут спросить следом

  • Как обновить конфигурацию без перезапуска?
  • Чем опасен эндпоинт /actuator/env?

Разбор

Собираю один артефакт для всех окружений, а различия задаю конфигурацией. В application.yml лежат значения по умолчанию, отличия окружений в профилях или, что чаще в Kubernetes, в переменных окружения: SPRING_DATASOURCE_URL перекрывает spring.datasource.url. Свои настройки собираю в классы @ConfigurationProperties с @Validated, чтобы приложение падало при старте, если чего-то не хватает, а не ночью на запросе. Секреты в репозиторий не кладу: они приходят из переменных окружения, Kubernetes Secrets или Vault. И не открываю наружу /actuator/env и configprops, где эти секреты видны.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме