@ConfigurationProperties

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

@ConfigurationProperties — это аннотация Spring Boot, которая позволяет связать префикс вынесенных свойств конфигурации из application.properties или application.yml с полями строго типизированного Java-класса. Эта аннотация заменяет разрозненные аннотации @Value, предоставляя чистую, проверяемую модель конфигурации. Использование @ConfigurationProperties улучшает автодополнение в IDE, обеспечивает безопасность рефакторинга и повышает тестируемость конфигурации Spring Boot, что делает разработку более эффективной и надежной.

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

@ConfigurationProperties: Spring загружает файлы application.properties или application.yml из src/main/resources и classpath. Профили (@Profile("prod"), application-prod.yml) активируют конфигурацию, специфичную для среды. Аннотация @ConfigurationProperties связывает префиксы свойств с типизированными POJO (Plain Old Java Objects), которые могут быть валидированы аннотациями JSR-303, такими как @NotNull или @Min. Переменные окружения могут перебить значения из файлов конфигурации, а внешняя конфигурация (например, volume-mounted файлы, серверы Spring Cloud Config, Kubernetes ConfigMap/Secrets) может перебить значения по умолчанию, включенные в приложение. Порядок приоритета строго определен, и важно знать этот порядок для корректного функционирования конфигурации.

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

YAML используется для создания читаемых человеком иерархических конфигураций, в то время как application.properties подходит для плоских key=value пар. Всегда используйте @ConfigurationProperties вместо разбросанных @Value, чтобы получить преимущества валидации, поддержки IDE и безопасности рефакторинга. Секреты, такие как пароли и ключи доступа, следует инжектировать через переменные окружения или менеджеры секретов, а не коммитить в репозиторий. Профили (@Profile) используются для управления различиями между разными средами (например, dev, stage, prod).

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

Ошибки при использовании @ConfigurationProperties могут включать коммит application-prod.yml с реальными секретами, что представляет собой серьезную уязвимость. Также важно включать аннотацию @Validated для классов, аннотированных @ConfigurationProperties, чтобы предотвратить запуск некорректно настроенных приложений. Другой распространенной ошибкой является активация множества профилей с конфликтующими конфигурациями. Смешение @Value и @ConfigurationProperties для одного и того же ключа также может привести к непредвиденным результатам.

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

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