Spring Boot: конфигурация, слияние сложных типов свойств
Когда списки настроены более чем в одном месте, переопределение работает путем замены всего списка.
Например, предположим, что объект MyPojo с атрибутами name и description по умолчанию равен null. В следующем примере представлен список объектов MyPojo из AcmeProperties:
@ConfigurationProperties("acme")
public class AcmeProperties {
private final List
Рассмотрим следующую конфигурацию:
acme:
list:
- name: my name
description: my description
---
spring:
profiles: dev
acme:
list:
- name: my another name
Если профиль dev не активен, AcmeProperties.list содержит одну запись MyPojo, как определено ранее. Если профиль dev включен, однако, список все еще содержит только одну запись (с name = my another name и description = null). Эта конфигурация не добавляет второй экземпляр MyPojo в список и не объединяет элементы.
Когда список указан в нескольких профилях, используется тот, который имеет самый высокий приоритет (и только один). Рассмотрим следующий пример:
acme:
list:
- name: my name
description: my description
- name: another name
description: another description
---
spring:
profiles: dev
acme:
list:
- name: my another name
В предыдущем примере, если активен профиль dev, AcmeProperties.list содержит одну запись MyPojo (с name = my another name и description = null). Для YAML можно использовать как разделенные запятыми списки, так и списки YAML для полного переопределения содержимого списка.
Для свойств карты вы можете связать значения свойств, взятые из нескольких источников. Однако для одного и того же свойства в нескольких источниках используется тот, который имеет наивысший приоритет. В следующем примере предоставляется Map<String, MyPojo> из AcmeProperties:
@ConfigurationProperties("acme")
public class AcmeProperties {
private final Map
Рассмотрим следующую конфигурацию:
acme:
map:
key1:
name: my name 1
description: my description 1
---
spring:
profiles: dev
acme:
map:
key1:
name: dev name 1
key2:
name: dev name 2
description: dev description 2
Если профиль dev не активен, AcmeProperties.map содержит одну запись с ключом key1 (с name = my name 1 и description = my description 1). Если профиль dev включен, однако, карта содержит две записи с ключами key1 (с name = dev name 1 и description = my description 1) и key2 (с name = dev name 2 и description = dev description 2).
Предыдущие правила слияния применяются к свойствам из всех источников свойств, а не только к файлам YAML.
Читайте также:
- Spring Boot: проверка типов свойств конфигурации, связывание свойств JavaBean
- Spring Boot: проверка типов свойств конфигурации, привязка конструктора
- Spring Boot: включение типов аннотированных @ConfigurationProperties
- Spring Boot: использование типов аннотированных @ConfigurationProperties
- Spring Boot: смягченная привязка
Комментарии
Отправить комментарий