YAML:以数据为中心,比json、xml等更适合做配置文件
1、基本语法规则:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 垂直对齐层次关系
- 注释为 “ # ” 单行注释
#YAML格式,注释为 “ # ” 单行注释
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: My Cool App
my:
servers:
- dev.bar.com
- foo.bar.com
2、支持的数据结构
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 字面量(数字、字符串、布尔值):单个的、不可再分的值
3、具体写法
- 字面量(数字、字符串、布尔值,还有map键值类似)
k: v :字面量直接写,字符串默认不用加上单引号或者双引号 ;
双引号:会转义字符串里边的特殊字符;
单引号:不会转义特殊字符,特殊字符会直接显示出来。
name: zhangsan
age: 20
isBoss: false
- 数组 (或者容器,如集合)
多行写法使用 数组名:
- 值来表示数组中的一个元素,需要注意缩进;
单行使用 数组名: [值,值] 来表示一个数组(中括号)
#多行结构
friends:
- zhangsan
- lisi
- wangwu
#单行结构
friend: [zhangsan,lisi,wangwu]
- 对象
多行写法:key:value的形式,使用多行写法需要注意缩进
单行写法:使用{key:value}的形式书写(大括号)
#多行结构
friend:
name:zhangsan
age:20
#单行结构
friend:{name: zhangsan,age: 20}
行内写法: k: v, 容器名: [Set/List/数组]; {map, 对象类型的属性}
中括号可省,大括号不可省
4、.properties文件和.yml文件之间的不同
- .properties文件中的写法
person.last-name=\u674E\u56DB
person.age=12
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=1
- .yml文件中的写法
person:
last-name: zhangsan
age: 20
birth: 2017/12/15
boss: false
maps:{key1:value1,key2:value2}
lists:[a,b,c]
dog:
name: dog
age: 1
5、通过yaml给对象注入值:
注入值:
yml:
student:
name: zs
age: 23
sex: true
birthday: 2019/11/26
绑定:
@Component //将此Javabean
@ConfigurationProperties(prefix="student")
public class Student{
...
...
}
补充:
@ConfigurationProperties(prefix="student") @Value("xx") 二者可以互补
批量注入 单个注入
优先级高;
支持松散语法 不支持松散语法
不支持SpEL 支持SpEL
支持JSR303数据校验 不支持JSR303数据校验
支持注入复杂类型 不支持复杂类型
6、@PropertySource:默认会加载application.properties/application.yml文件中的数据;例如@PropertySource(value={"classpath:conf.properties"})加载conf.properties,但是,@PropertySource只能加载properties,不能加载yml。