Переменные окружения

Тема дорожной карты · Spring Boot

Переменные окружения в Spring Boot — это первоклассный источник вынесенной конфигурации, который Spring Boot сопоставляет с ключами свойств с помощью гибкого соглашения об именовании: например, переменная окружения SPRING_DATASOURCE_URL автоматически привязывается к свойству spring.datasource.url, используемому DataSourceAutoConfiguration Spring Boot. Spring Boot обрабатывает переменные окружения через иерархию PropertySource, в которой они имеют более высокий приоритет, чем записи в файле application.properties, но более низкий, чем аргументы командной строки, — это позволяет развёртываниям Docker и Kubernetes корректно переопределять умолчания. Доступ к отдельным переменным окружения в коде приложения прост с помощью @Value("${spring.datasource.url}") или через внедрение интерфейса Environment, тогда как типизированная привязка через @ConfigurationProperties предпочтительна для групп связанных настроек. В Docker Compose переменные окружения передаются через блок environment: или файл .env; в Kubernetes они определяются в массиве env: спецификации контейнера или берутся из ссылок на ConfigMap и Secret. Чувствительные значения, такие как пароли баз данных и секреты клиентов OAuth2, всегда должны передаваться в Spring Boot-приложение через переменные окружения из Kubernetes Secrets, а не жёстко прописываться в application.properties.

Как это работает

Переменные окружения: Spring грузит application.properties или application.yml из src/main/resources + classpath. Profiles (@Profile("prod"), application-prod.yml) активируют environment-specific config. @ConfigurationProperties связывает property-prefixes с типизированными POJO (с валидацией). Environment variables перебивают файлы. Внешняя конфигурация (volume-mounted файл, Spring Cloud Config server, Kubernetes ConfigMap/Secrets) перебивает bundled-defaults. Precedence строгая — знайте порядок.

Когда применять

YAML для human-readable иерархического config; properties для плоских key=value. Всегда @ConfigurationProperties вместо разбросанных @Value — даёт валидацию, IDE-поддержку, refactor safety. Инжектьте секреты через env vars или secrets manager — не коммитьте. Profiles для environment-различий; один profile на env (dev, stage, prod).

Типичные ошибки

Ловушки Переменные окружения: коммит application-prod.yml с реальными секретами (Vault, Spring Cloud Config или env vars); не валидируют config (@Validated на @ConfigurationProperties ловит плохой config на startup, не в prod); много profiles активны с конфликтами; смешение @Value + @ConfigurationProperties для того же ключа.

Связанные понятия

Полезные ресурсы