private final List<MyPojo> list = new ArrayList<>();
public List<MyPojo> getList() {
return this.list;
}
}
复制代码
考虑下面的配置:
acme:
list:
- name: my name
description: my description
---
spring:
profiles: dev
acme:
list:
- name: my another name
复制代码
假如 dev profile 未激活,则 AcmeProperties.list 包含一个 MyPojo 实体,如前所界说。但是,假如启用了 dev profile,则 list 仍然只包含一个实体(name:my another name,description:null)。此配置不会向列表中添加第二个 MyPojo 实例,也不会集并实例。
在多个 profiles 中指定 List 时,将使用优先级最高的(且仅使用该 List)。请考虑以下示例:
acme:
list:
- name: my name
description: my description
- name: another name
description: another description
---
spring:
profiles: dev
acme:
list:
- name: my another name
复制代码
在上面的示例中,假如 dev profile 已激活,则 AcmeProperties.list 包含一个 MyPojo 实体(name:my another name ,description:null)。对于 YAML,可以使用逗号分隔的列表和 YAML 列表来完全覆盖列表的内容。
对于 Map 属性,你可以绑定来自多个源的属性值。但是,对于多个源中的同一属性,将使用优先级最高的属性。以下示例公开来自 AcmeProperties 的 Map:
@ConfigurationProperties("acme")
public class AcmeProperties {
private final Map<String, MyPojo> map = new HashMap<>();
public Map<String, MyPojo> getMap() {
return this.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 profile 未激活,则 AcmeProperties.map 包含一个键为 key1 的实体(name:my name 1,description:my description 1)。但是,假如启用了 dev profile,那么 map 包含两个实体,此中键为 key1(name :my name 1,description:my description 1)和 key2(name :my name 2,description:my description 2)。
注释:前面的合并规则实用于来自所有属性源的属性,而不仅仅是 YAML 文件。
属性转换