Профили Spring предусматривают возможность разделить части конфигурации вашего приложения и открывать доступ к ним только в определенных окружениях. Любой @Component, @Configuration или @ConfigurationProperties можно пометить аннотацией @Profile для ограничения при загрузке, как это показано в следующем примере:
@Configuration(proxyBeanMethods = false) @Profile("production") public class ProductionConfiguration { // ... }
@Configuration(proxyBeanMethods = false) @Profile("production") class ProductionConfiguration { // ... }
@ConfigurationProperties регистрируются через аннотацию
@EnableConfigurationProperties вместо автоматического сканирования, аннотация
@Profile должна быть задана для класса, помеченного аннотацией
@Configuration, который содержит аннотацию
@EnableConfigurationProperties. В случае, если сканируются аннотации
@ConfigurationProperties, аннотацию
@Profile можно задать для самого класса, помеченного аннотацией
@ConfigurationProperties.
Можно использовать свойство spring.profiles.active для Environment, чтобы задать то, какие профили будут являться активными. Свойство можно задать любым из способов, описанных ранее в этой главе. Например, можно включить его в состав файла application.properties, как показано в следующем примере:
spring.profiles.active=dev,hsqldb
spring:
profiles:
active: "dev,hsqldb"
Вы также можете задать его в командной строке, используя следующий ключ: --spring.profiles.active=dev,hsqldb.
Если ни один профиль не будет активен, активируется профиль по умолчанию. Имя профиля по умолчанию – default, и его можно тонко настроить с помощью свойства spring.profiles.default для Environment, как показано в следующем примере:
spring.profiles.default=none
spring:
profiles:
default: "none"
spring.profiles.active и spring.profiles.default можно использовать только в документах, не относящихся к профилю. Это значит, что их нельзя включить в связанные с конкретным профилем файлы или документы, активированные при помощи spring.config.activate.on-profile.
Например, конфигурация второго документа недопустима:
# this document is valid
spring.profiles.active=prod
#---
# this document is invalid
spring.config.activate.on-profile=prod
spring.profiles.active=metrics
# this document is valid
spring:
profiles:
active: "prod"
---
# this document is invalid
spring:
config:
activate:
on-profile: "prod"
profiles:
active: "metrics"
Добавление активных профилей
Свойство spring.profiles.active следует тем же правилам упорядочивания, что и другие свойства: Приоритет выше у той, которая имеет наибольший показатель PropertySource. Это означает, что можно задавать активные профили в application.properties, а затем заменять их с помощью ключа командной строки.
Иногда полезно иметь свойства, которые добавляют активные профили, а не заменяют их. Свойство spring.profiles.include можно использовать для добавления активных профилей поверх тех, которые активируются свойством spring.profiles.active. Точка входа SpringApplication также имеет Java API для установки дополнительных профилей. См. метод setAdditionalProfiles() в разделе, посвященном SpringApplication.
Например, если приложение выполняет со следующими свойствами, общий и локальный профили будут активированы, даже если оно выполняется с использованием ключа --spring.profiles.active:
spring.profiles.include[0]=common
spring.profiles.include[1]=local
spring:
profiles:
include:
- "common"
- "local"
spring.profiles.active,
spring.profiles.include можно использовать только в документах, не относящихся к профилю. Это значит, что его нельзя включить в связанные с конкретным профилем файлы или документы, активированные при помощи
spring.config.activate.on-profile.
Группы профилей
Иногда профили, которые определяются и используются в приложении, слишком мелкомодульные и становятся громоздкими в использовании. Например, могут быть профили proddb и prodmq, которые используются для независимой активации функций базы данных и обмена сообщениями.
Помогает в этом функция Spring Boot, которая позволяет определять группы профилей. Группа профилей позволяет определять логическое имя для связанной группы профилей.
Например, мы можем создать production группу, состоящую из наших профилей proddb и prodmq.
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
spring:
profiles:
group:
production:
- "proddb"
- "prodmq"
Теперь приложение можно запустить, используя --spring.profiles.active=production, чтобы активировать профили production, proddb и prodmq за один раз.
Программная установка профилей
Устанавливать активные профили можно программно, вызвав SpringApplication.setAdditionalProfiles(…) до запуска приложения. Также можно активировать профили с помощью интерфейса ConfigurableEnvironment из Spring.
Связанные с конкретным профилем конфигурационные файлы
Связанные с конкретным профилем варианты как application.properties (или application.yml), так и файлов, на которые ссылаются через аннотацию @ConfigurationProperties, учитываются как файлы и загружаются.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ