目录
理解
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
数据类型
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
简单的使用
application.yaml的编写可以在实体类中应用,可以代替了application.properties的用法
#普通的key-value
name: zhao
#对象
student1:
name: zhao
age: 3
#行内写法
student2: {name: zhao,age: 5}
#数组
pets:
- cat
- dog
- pig
pets2: [cat,dog,pig]
#给实体类Person赋值
person:
name: zhao${random.uuid} #${random.uuid} 使用了SPEL 给name后面加上一个随机的uuid
age: ${random.int} #${random.int} 使用了SPEL 随机生成一个数
happy: false
birth: 2019/11/02
maps: {k1: v1,k2: v2}
lists:
- code
- music
- girl
dog:
name: 旺财
age: 3
实体类Prerson.class
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //链式写法
@Component
@ConfigurationProperties(prefix = "person") //引用了yaml中的person类 给每个对应的属性赋值
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date brith;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>