yaml文件学习
YAML文件详解
YAML文件是SpringBoot使用一个全局的配置,配置文件名称是固定的,是用于修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了。作用与properties文件基本一致,但是比properties更方便,更强大。例如修改项目的端口号
Properties文件:
Server.port=8080
yaml文件:
Service:
Port: 8080
基础语法:
重点:yaml文件对空格要求及其严格!!!
写法:字面量:普通的值 [数字,布尔值,字符串]
Key: value
1.1 单个存放[数字,布尔值,字符串]
字符串默认不用加引号,如果需要有转译的就需要加,不过需要注意双引号和单引号的区别
“”双引号:不会转义特殊的字符,最终以需要表达的特殊意义输出,例如\t、\n
Hello:“hello \n word!!!” #输出 hello 换行 word
‘’单引号:会把特殊字符转义,最终以普通字符的形式输出
Hello:“hello \n word!!!” #输出 hello \n word
1.2 存放对象、map(键值对)
存放对象有两种方式
第一种:第一层写对象名称,对象名称下面写属性名称,一定要注意缩进
对象的属性名称要在同一层次内
#有一个person类,该类下面有name、age两个属性
Person:
Age:19
Name:小明
写的时候一定要注意空格,注意对齐方式
第二种:行内写法
Dog:{name:小明,age:19}
Map集合的写法与对象差不多,也是两种一样的写法
Map:
K1:map1
K2:map2
1.3 存放数组(list、set)
数组也有两种写法,同样要注意缩进
第一种:用”-”来表示数组中的一个元素,注意“-”后的一个空格,不能少
hobby:
- Play basketball
- sing
第二种:行内写法
Pet:[猫,狗,大象]
1.4 注意事项
Yaml文件对空格要求及其严格
属性和值的大小写都是十分敏感
以缩进来控制层级关系,只要是左边对齐的一列数据都是在同一个层级的
- yaml文件注入配置文件
这才是yaml文件的强大之处,可以给实体类直接注入匹配值
以前的如果我们需要给属性赋值,需要在属性上使用注解@value或者到配置文件写上一大串配置,使用yaml后可以直接通过注解@ConfigurationProperties(prefix = "xxx")进行绑定
2.1 注入配置文件
//student实体类
@Component
@ConfigurationProperties(prefix = "student") //绑定yaml配置文件中的student
public class Student {
private String name;
private Integer age;
private Date birthday;
private Boolean sex;
private Map<String,Object> map;
private List<Object> list;
private Grade grade;
//有参无参构造、get、set、toString方法
}
//Grade实体类
@Component
@ConfigurationProperties(prefix = "grade")
public class Grade {
private String name;
private String director;
//有参无参构造、get、set、toString方法
}
Yaml文件
student:
name: 小明
age: 18
birthday: 1999/12/26
sex: true
map:
k1: map1
k2: map2
list:
- list1
- list2
grade:
name: 1812班
director: 王主任
- yaml文件的小知识
在yaml文件中可以使用占位符、松散绑定等小功能,以及多环境切换也十分简单
3.1 松散绑定
不过使用松散绑定最好命名要规范,属性名称使用小驼峰命名
例如:lastName和last-name是一样的
3.2 占位符
使用${},在里面写需要的内容
例如:
1、${random.uuid}生成随机字符串
2、${random.int}生成随机整数
3、k2: ${map.k1:map2}
如果map.k1存在,则k2=map.k1的值
如果map.k1不存在,则k2=map2
4.文本块
|:使用|标注的文本北荣缩进表示的块,可以保留块中已有的回车换行
value: |
hello
world!
输出:hello 换行 world!
+表示保留文字块末尾的换行,-表示删除字符串末尾的换行
value: |
hello
value: |-
hello
value: |+
hello
输出:hello\n hello hello\n\n(有多少个回车就有多少个\n)
3.锚点与引用
使用 & 定义数据锚点(即要复制的数据),使用 * 引用锚点数据(即数据的复制目的地)
name: &a yamlbook: *abooks:
- java
- *a
- python
输出book: yaml
输出books:[java,yaml,python]
注意*引用部分不能追加内容