YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将YAML库放到classpath下,SpringApplication类都会自动支持YAML作为properties的替换。
加载YAML
Spring框架提供两个便利的类用于加载YAML文档:
1、YamlPropertiesFactoryBean
会将YAML作为Properties来加载。
2、YamlMapFactoryBean
会将YAML作为Map来加载。
例如一:
environments:
dev:
url: http://dev.ctw.com
name: Developer Setup
test:
url: http://test.ctw.com
name: Test Setup
provide
url: http://provide.ctw.com
name: Provide Setup
会转变为:
environments.dev.url=http://dev.ctw.com
environments.dev.name=Developer Setup
environments.test.url=http://test.ctw.com
environments.test.name=Test Setup
environments.provide.url=http://provide.ctw.com
environments.provide.name=Provide Setup
例如二、
YAML列表被表示成[index]间接引用作为属性keys的形式。
my:
servers:
- dev.ctw.com
- test.ctw.com
- provide.ctw.com
会转变为:
my.servers[0]=dev.ctw.com
my.servers[1]=test.ctw.com
my.servers[2]=provide.ctw.com
使用Spring DataBinder工具绑定那样的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中有个List或Set类型的属性。并且需要提供一个setter或使用可变的值初始化他,比如下面的代码绑定上面的属性:
@ConfigurationProperties(prefix = "my")
public class Config {
private List<String> servers = new ArrayList<String>();
public List<String> getServers() {
return this.servers;
}
}
多环境配置
server:
address: 192.168.0.100
---
spring:
profiles: dev
server:
address: 192.168.0.110
---
spring:
profiles: test
server:
address: 192.168.0.120
如果dev配置被激活,那么server.address属性将是192.168.0.110,若dev和test都未被启用,则属性的值将是192.168.0.100。
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货: