Профілі 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
, враховуються як файли та завантажуються.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ