springboot之yaml
yaml简介
yaml是“yaml ain’t Markup Language”(yaml不是一种标记语言)的缩写。yaml使用空白、缩进、分行组织语言,从而使数据更加简洁易读。
spring boot配置除了默认的.properties
文件,还可以使用.yaml
文件,后缀名yml
或者yaml
都可以
基本语法
- yaml使用键值对表示属性值,
k: v
,注意:冒号后有空格 - 对大小写敏感
- 使用缩进表示层级关系
- 缩进只允许使用空格,不能用tab
- 缩进的空格数不重要,只要相同层级的元素对齐即可
#
表示注释- 字符串可以不使用引号,也可以使用。单引号和不使用引号效果一样,表示按原文输出,不考虑转义字符,双引号表示会进行转义
- 不支持中文key,若非要使用,需要使用双引号+方括号括起来,例如
"[中文]"
数据类型
-
字面量:不可再分的值,如number、string、boolean、date、null,写法为:
k: v
-
数组:如array、list、queue等,写法为:
#写法1 k: [v1, v2, v3] #写法2 k: - v1 - v2 - v3
-
对象:键值对的集合。如map、object等,写法为:
#写法1 k: {k1: v1, k2: v2, k3: v3} #写法2 k: k1: v1 k2: v2 k3: v3
小练习
现有Person
和Pet
类,如下,我们需要使用yaml给Person
配置参数
@Data
@Component
@ConfigurationProperties(prefix = "person")// 该类的配置以person为前缀
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interest;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salary;
}
@Data
public class Pet {
private String name;
private Double weight;
}
写完这两个类后,会发现再Person
类里,idea会提示没有配置Configuration Annotaion Processor
,缺少这个东西,我们去写配置文件时就没有提示了。
此时我们需要去pom.xml
中导入如下依赖,这样,我们再写配置文件时就会有提示了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
同时,我们需要在打包时排除这个依赖,因为他和业务无关,只是为了开发方便,需要在打包插件中添加配置,如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<!-- 打包时排除配置处理器,因为他只是为了写配置时有提示,与业务无关 -->
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
写完后,我们就可以开始写yaml配置了,如下:
person:
user-name: 张三 # 写成userName也可
boss: false
birth: 2020/1/1 # 日期默认用/
age: 11
pet: {name: 旺财, weight: 18} # 或者如下
# pet:
# name: 旺财 # 冒号后有空格
# weight: 18
# interest: [看电影, 打游戏] #或者如下
interest:
- 看电影
- 打游戏
animal: [猫, 狗]
score: {"[语文]":100, math:99} #key不支持中文,需要用双引号和方括号括起来
salary: [1000, 2000]