Профілі 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, враховуються як файли та завантажуються.