一.yaml概述
YAML 和XML或properties等一样,是一种标记语言,常用作配置文件。YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件。YAML 的配置文件后缀为 .yml或.yaml
SpringBoot中支持.properties和.yml两种全局配置文件的书写方式,且配置文件名称是固定的,两种方式的区别如下:
- application.properties
- 语法结构 :key=value
- application.yml
- 语法结构 :key:空格 value
由于yaml语法简单,结构清晰,因此成为了SpringBoot官方推荐使用的配置文件格式。
二.yaml语法规则
1.基本语法
- 大小写敏感(key和value均区分大小写)
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
2.基本量/纯量
基本量包括字符串String、布尔值boolean、数字、日期等最基本的,不可再分的值,其yaml语法规则如下:
基本语法:k: value
布尔值: - key: true #true,True都可以 - key: false #false,False都可以数字: - key: 123 - key: 3.14字符串: - str: 哈哈 #字符串默认不用加双引号或单引号,也可以使用双引号或者单引号 - str: 'Hello \n world' #单引号会转义特殊字符,输出 :Hello \n world - str: "Hello \n world" #双引号不会转义特殊字符,输出 :Hello 换行 world
3.对象、Map(键值对集合)
- 标准写法:
key:
key1: value1
key2: value2
- 行内写法:
key: {key1: value1,key2: value2}
4. 数组、列表(Array、List、Set)
- 标准写法:
key:
- value1
- value2
- 行内写法:
key: [value1,value2,value3]
5.yaml配置实例
我们要配置属性的类如下所示:
package com.atguigu.boot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String userName;
private boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String,Object> score;
private Set<Double> salarys;
private Map<String,List<Pet>> allpets;
//get、set方法省略...
@Override
public String toString() {
return "Person{" +
"userName='" + userName + '\'' +
", boss=" + boss +
", birth=" + birth +
", age=" + age +
", pet=" + pet +
", interests=" + Arrays.toString(interests) +
", animal=" + animal +
", score=" + score +
", salarys=" + salarys +
", allpets=" + allpets +
'}';
}
}
package com.atguigu.boot.bean;
public class Pet {
private String petName;
private Double weight;
//get、set方法省略...
@Override
public String toString() {
return "Pet{" +
"petName='" + petName + '\'' +
", weight=" + weight +
'}';
}
}
其yaml配置文件内容如下:
person:
#基本量配置
userName: zhangsan
boss: true
birth: 2021/8/18
age: 22
#列表、数组配置
interests:
- 足球
- 篮球
animal: [小猫,小狗,小猪]
salarys:
- 3000
- 999.98
- 3.14
#对象、Map配置
pet:
petName: jerry
weight: 60.5
score: {english: 80,math: 99}
#复合结构配置
allpets:
sick:
- {petName: tom,weight: 30.4}
- petName: 宠物1号
weight: 99.99
healthy:
- {petName: 宠物二号,weight: 88.8}
- {petName: 宠物3号,weight: 66.6}
其运行结果如下:
@RestController
public class HelloController {
@Autowired
Person person;
@RequestMapping("/person")
public Person person(){
return person;
}
}
三.自定义类的绑定提示
我们自定义的类在写yaml配置时,不像官方配置一样有提示,这样写起来会很不方便。我们可以添加一个配置处理器插件,帮助我们提示书写。
<!-- 导入配置处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>