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文件对空格要求及其严格

属性和值的大小写都是十分敏感

以缩进来控制层级关系,只要是左边对齐的一列数据都是在同一个层级的

  1. 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: 王主任

  1. 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]

注意*引用部分不能追加内容