2.1 配置文件简介
Spring Boot修改默认配置信息使用的是一个配置文件,配置文件的名称是固定的;有两种形式:
- application.properties
- application.yml
配置文件的作用: 用于修改SpringBoot的默认配置,在SpringBoot中很多配置都已经事先准备好了,没有特殊需求我们直接使用就可以。
什么是YAML呢?
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
为什么要使用YAML作为配置文件的格式?
以前大部分的配置文件多为xml,但是对于每一个配置xml都需要有指定的标签,有的时候定义的标签还多于配置信息,所以使用xml作为配置文件也比较麻烦复杂。而YAML在写法上更为的简单,YAML以数据为中心,它比JSON、XML等格式更适合作为配置文件格式。
- XML配置信息
<server>
<port>8081</port>
</server>
- YAML配置信息
server:
port: 8081
从以上对比中就可以清晰地看出YAML写法更为简洁。
2.2 YAML的语法
1.基本语法
- 使用缩进表示层级关系,k:(空格)v:表示一对键值对(空格是必不可少的)。
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要是相同层级的元素左侧对齐即可。
- YAML中属性和值是大小写敏感的。
YAML使用实例:
person:
lastName: 张三
age: 15
2.YAML支持三种数据结构
- 对象(Map):键值对的集合
k: v:在下一行来写对象到的属性何止的关系,只需要注意缩进即可
(对象还是k: v的方式来写)
对象的写法:
1.常规写法
friends:
lastName: zhangsan
age: 20
2.行内写法
friends: {
lastName: zhangsan,age: 20}
- 数组(List、Set):一组按次序排列的值
- 使用
-
短横线表示数组中的一个元素
- 使用
1.常规写法
pets:
- cat
- dog
- pig
2.行内写法
pets: [cat,dog,pig]
-
复合结构:是以上写法的任意组合,它们之间是可以互相嵌套的。
-
字面量(普通的值:数字、字符串、布尔值、日期):单个的、不可再分的值
k: v: 字面量直接写
,字符串默认是不用加单引号或双引号。- “”:双引号会转义字符串里边的特殊字符,特殊字符会作为本身的意思,如在字符串中加入\n则会换行。
- ‘’:单引号的话就不会对特殊字符转义,输出的是原始字符串。
- 默认是不用引号的。
- 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
-
文档
- 多个文档使用
---
隔开。
- 多个文档使用
注意:Spring Boot使用的是snakeyaml解析yml文件的。
2.3 YAML配置文件值注入实战
需求说明:
- 定义两个实体类,使用yaml配置类属性信息,并使用springboot单元测试的方式输出相关内容。
- 引入配置文件处理器,可以使得我们写配置能够有提示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 创建两个实体类Person、Dog
package com.to1024.springboot_002_yaml.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配置文件中的属性值,映射到这个组件中
*@ConfigurationProperties(prefix = "person"):用于告诉Spring Boot将本类中的所有属性和配置文件中的相关配置进行绑定
*prefix = "person":与配置文件中的属性一一对应
*
* 只有当这个类被@Component注解时,他才能使用容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private boolean boss;
private Date birth;
private Map<String,String> maps;
private List<String> lists;
private Dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth