yaml文件
yaml是什么:
用于表示结构化数据,Spring Boot 常用它编写配置文件,扩展名为 .yml 或 .yaml。
语法规则:
-
键值规则:使用冒号分隔键和值,普通写法中冒号后留空格;键区分大小写。如:
k: v -
缩进规则:使用空格表示层级,禁止使用 Tab 字符缩进。同级键对齐,不要求空格数,但嵌套映射比父级缩进更深;推荐每层两个空格。
-
注释规则:使用
#表示注释。行尾注释需要空白分隔,引号中的#属于字符串内容。 -
基本数据结构:
- 标量:单个值,包括字符串、数字、布尔值和空值。
- 映射:键值对的集合,可表示对象或 Map。
- 序列:有序元素集合,可表示列表或数组。
-
集合写法:映射支持缩进式和花括号行内式;序列支持短横线分项式和方括号行内式。
-
类型识别:未加引号的内容可能被识别为数字、布尔值或空值;加引号可以明确表达字符串。日期的自动识别取决于解析器和 schema。
-
引号规则:双引号处理反斜杠转义;单引号保留反斜杠。单引号字符串中的单引号本身,通过连续两个单引号表示。
-
生效优先级按先后顺序,和properties一起生效,同时相同配置properties的优先级比yml高。
关于键值对和数组写法:
对象:键值对的集合。map、hash、set、object。
行内写法:
k: {k1: v1, k2: v2, k3: v3}
或:
k:
k1: v1
k2: v2
k3: v3
数组:一组按次序排列的值。array、list、queue。
行内写法:
k: [v1, v2, v3]
或:
k:
- v1
- v2
- v3
例:
类原型:
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ConfigurationProperties(prefix = "person")
@Component
@ToString
@Data
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;
}
yml文件:
person:
userName: zhangsan
boss: true
birth: 2019/12/9
age: 18
# interests: [篮球, 足球]
interests:
- 篮球
- 足球
- 18
animal: [阿猫, 阿狗]
# score:
# english: 80
# math: 90
score: {english: 80, math: 90}
salarys:
- 9999.98
- 9999.99
pet:
name: 阿狗
weight: 99.99
allPets:
sick:
- {name: 阿狗, weight: 99.99}
- name: 阿猫
weight: 88.88
- name: 阿虫
weight: 77.77
health:
- {name: 阿花, weight: 199.99}
- {name: 阿明, weight: 199.99}
配置处理器:
这个可以方便开发,spring-boot-configuration-processor 在编译阶段分析配置属性定义,生成配置元数据,帮助 IDE 提供配置项补全和说明。就是像编写SpringBoot原生类那样给提示。
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
下面的东西可以在打jar包时移除配置处理器相关类,毕竟实际业务代码用不上这些
<build>
<plugins>
<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>
</plugins>
</build>