YAML:以数据为中心,比json、xml等更适合做配置文件
1、基本语法规则:
#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、支持的数据结构
3、具体写法
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文件之间的不同
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
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。