Конфигурация и секреты
Вопрос
Как вы организуете конфигурацию Spring Boot приложения для разных окружений и где храните секреты?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Общий 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 ошибок.