Профили 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
, учитываются как файлы и загружаются.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ