@Profile

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

Spring Profiles предоставляют механизм в Spring Boot для разделения частей конфигурации приложения и активации определённых бинов или наборов свойств только в конкретных средах — dev, test, staging и prod. Активация профиля так же проста, как установка spring.profiles.active=prod в application.properties, передача -Dspring.profiles.active=prod в командной строке JVM или установка переменной окружения SPRING_PROFILES_ACTIVE в манифесте Docker или Kubernetes. Аннотация @Profile("prod") на методе @Bean или классе @Configuration указывает контексту приложения Spring Boot включать этот бин только при активном указанном профиле, позволяя настраивать источники данных, стратегии кэширования с spring-boot-starter-data-redis или политики безопасности через SecurityFilterChain Spring Security в зависимости от среды. Профиль-специфичные файлы свойств — application-prod.yml и application-dev.yml — автоматически загружаются Spring Boot и сливаются с базовым application.yml, поэтому переопределение spring.datasource.url для каждой среды не требует изменений кода. Spring Profiles чисто интегрируются с @SpringBootTest(properties = "spring.profiles.active=test") и Testcontainers для создания реалистичных, изолированных сред интеграционного тестирования в CI-пайплайнах.

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

@Profile: 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).

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

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

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

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