Профілі Spring передбачають можливість розділити частини конфігурації вашої програми та відкривати доступ до них лише у певних оточеннях. Будь-який @Component, @Configuration або @ConfigurationProperties можна позначити анотацією @Profile для обмеження під час завантаження, як це показано у наступному прикладі:

Java
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {
    // ...
}
Kotlin
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
@Configuration(proxyBeanMethods = false)
@Profile("production")
class ProductionConfiguration {
    // ...
}
Якщо біни з анотацією @ConfigurationProperties реєструються через анотацію @EnableConfigurationProperties замість автоматичного сканування, анотація @ Profile має бути задана для класу, позначеного інструкцією @Configuration, який містить інструкцію @EnableConfigurationProperties. У випадку, якщо скануються анотації @ConfigurationProperties, анотацію @Profile можна задати для самого класу, позначеного інструкцією @ConfigurationProperties.

Можна використовувати властивість spring.profiles.active для Environment, щоб задати те, які профілі будуть активними. Властивість можна задати будь-яким із способів, описаних раніше у цьому розділі. Наприклад, можна включити його до складу файлу application.properties, як показано в наведеному нижче прикладі:

Properties
spring.profiles.active=dev,hsqldb
Yaml
spring:
  profiles:
    active: "dev, hsqldb"

Ви також можете задати його в командному рядку, використовуючи наступний ключ: --spring.profiles.active=dev,hsqldb.

Якщо жоден профіль не буде активним, активується профіль за промовчанням. Стандартне ім'я профілю - default, і його можна тонко налаштувати за допомогою властивості spring.profiles.default для Environment, як показано в наступному прикладі:

Properties
spring.profiles.default=none
Yaml
spring:
  profiles:
    default: "none"

spring.profiles.active та spring.profiles.default можна використовувати лише в документах, які не належать до профілю. Це означає, що їх не можна включити до пов'язаних з конкретним профілем файлів або документів, активованих за допомогою spring.config.activate.on-profile.

Наприклад, конфігурація другого документа є неприпустимою:

Properties
# this document is valid
spring.profiles.active=prod
#---
# this document is invalid
spring.config.activate.on-profile=prod
spring.profiles.active=metrics
Yaml
# 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:

Properties
spring.profiles.include[0]=common
spring.profiles.include[1]=local
Yaml
spring:
  profiles:
    include:
      - "common"
      - "local"
Як і spring.profiles.active, spring.profiles.include можна використовувати тільки в документах, не що належать до профілю. Це означає, що його не можна включити до пов'язаних з конкретним профілем файлів або документів, активованих за допомогою spring.config.activate.on-profile.

Групи профілів

Іноді профілі, які визначаються та використовуються у додатку, надто дрібномодульні та стають громіздкими у використанні. Наприклад, можуть бути профілі proddb та prodmq, які використовуються для незалежної активації функцій бази даних та обміну повідомленнями.

Допомагає в цьому функція Spring Boot, яка дозволяє визначати групи профілів. Група профілів дозволяє визначити логічне ім'я для пов'язаної групи профілів.

Наприклад, ми можемо створити production групу, яка складається з наших профілів proddb та prodmq.

Properties
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
Yaml
spring:
  profiles:
    group:
      production:
      - "proddb"
      - "prodmq"

Тепер програму можна запустити, використовуючи --spring.profiles.active=production, щоб активувати профілі production, proddb та prodmq за один раз.

Програмне встановлення профілів

Встановлювати активні профілі можна програмно, викликавши SpringApplication.setAdditionalProfiles(…) до запуску програми. Також можна активувати профілі за допомогою інтерфейсу ConfigurableEnvironment із Spring.

Пов'язані з конкретним профілем конфігураційні файли

Пов'язані з конкретним профілем варіанти як application.properties (або application.yml), так і файлів, на які посилаються через інструкцію @ConfigurationProperties, враховуються як файли та завантажуються.