YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),听着挺绕口,但其实他是以数据作为中心的一种语。
yaml文件是SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的,是用于修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了。作用与properties文件基本一致,但是比properties更方便,更强大。例如更改项目的端口号
properties文件
server.port=8080
yaml文件
server:
port: 8080
1、yaml基础语法
重点: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: name: 小明 age: 19
写的时候一定要注意空格,以下是一个错误写法:
#有一个person类,该类下面有个name属性,name字段又有一个age字段 person: name: 小明 age: 19
第二种:行内写法
dog: {name: 旺财,age: 3}
Map集合的写法与对象差不多,也是两种一样的写
map: k1: map1 k2: map2
-
1.3 存放数组(List、set)
数组也有两种写法,同样要注意缩进。
第一种:用"-"来表示数组中的一个元素,注意”-“后的一个空格,不能少
hobby: - Play basketball - sing
第二种:行内写法
pets: [猫,狗,仓鼠]
-
1.4 注意事项
- 1、yaml文件对空格要求极其严格
- 2、属性和值的大小写都是十分敏感的
- 3、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
2、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配置的值都能注入到实体类中
3、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 -
3.3 多环境切换
-
3.3.1 properties文件多环境切换
多环境切换在properties文件中需要另外新建一个properties文件,通过-后面的标识进行切换。
application.properties
#设置端口号 server.port=8080 #切换到某个环境 spring.profiles.active=dev
application-dev.properties
#设置端口号 server.port=8081
application-test.properties
#设置端口号 server.port=8082
-
3.3.2 yaml文件多环境切换
使用yaml文件后,只需要在同一个yaml文件内就可以分割出多个环境,然后进行调用,更好的展现了yaml文件的方便与复用性。通过“—”进行分割。
application.yaml
#设置端口号 server: port: 8081 #切换环境 spring: profiles: active: dev #环境二,dev,利用---分割出一个环境 --- server: prot: 8082 #设置环境名称 spring: profiles: dev #环境三,test --- server: prot: 8083 #设置环境名称 spring: profiles: test
-