24.6.1 Loading YAML
Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML加载为Properties,YamlMapFactoryBean会将YAML加载为Map。
例如,下面的YAML文档:
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: My Cool App
会被转化到这些属性:
environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App
YAML列表被表示成使用[index]间接引用作为属性keys的形式,例如下面的YAML:
my:
servers:
- dev.bar.com
- foo.bar.com
将会被转化为:
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
使用Spring DataBinder
工具集绑定这些属性(这是@ConfigurationProperties
做的事)时,你需要确保目标bean有个java.util.List
或Set
类型的属性,并且需要提供一个setter
或使用可变的值初始化它(new ArrayList<>()
),比如,下面的代码将绑定上面的属性:
@ConfigurationProperties(prefix="my")
public class Config {
private List<String> servers = new ArrayList<String>();
public List<String> getServers() {
return this.servers;
}
}
需要注意的是configuration list的override并不会像我们希望的那样,举个例子,就像上面的
my.servers
,如果它在多个地方被定义,只有单一的元素才会被覆盖。如果想要my.servers
被正常override的话,需要把它定义在一个元素内,而不是一个列表:
my:
servers: dev.bar.com,foo.bar.com