SringBoot之yaml语法
SpringBoot之yaml语法
1、配置文件
官方配置文档太多了,根本记不住!
怎么办呐-->了解原理
SpringBoot使用了一个全局配置文件,且配置文件的名称是固定的:
- application.properties
- 语法结构:key=value
- application.yaml
- 语法结构:key: 空格 value
2、YAML
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。(来自于百度百科词条解释)
YAML和XML的区别(以配置端口号为例):
YAML配置:
server:
address: 8081
XML配置 :
<server>
<port>8081<port>
<server>
2.1、YAML语法
基础语法--> key:value
#普通的key value键值对
name: liberty
#对象
student:
name: liberty
age: 20
#对象的行内写法
student: {name: liberty,age: 20}
#数组
pets:
- dog
- cat
- pig
#数组的行内写法
pets: [dog,cat,pig]
注意:yaml中对于空格的要求极其严格
student:
name: liberty
age:20
(age前面加一个空格的话相当于age是name下面的属性)
student:
name: liberty
age: 20
(这样相当于三个对象)
2.2、注入配置文件
程序实现
2.2.1、将默认的application.properties后缀改为yaml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4e4eTmk-1648719519182)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220330213405731.png)]
2.2.2、根据提示打开文档导入配置文件处理器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p40lMvZ8-1648719519185)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220330213554228.png)]
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.2.3、编写yaml配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkbICM2S-1648719519187)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220330213638408.png)]
2.2.4、在SpringBoot的主程序的同级目录下建包(必须这样,约定大于配置)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohe06H0Y-1648719519190)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220330213842399.png)]
package com.liberty.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
/**
* 注解意思是将此添加到SpringBoot组件里面
*/
@ConfigurationProperties(prefix = "person")
/**
* ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关配置进行绑定
* 参数prefix = "person" 将配置文件中的person下面的所有属性一一对应
*/
public class Person
{
private String name;
private Integer age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public Person() {
}
}
2.2.5、测试无误后,在测试单元中进行测试,看看是否注入成功
package com.liberty;
import com.liberty.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Demo02ApplicationTests {
//自动装配
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Or1xslfD-1648719519191)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220330214653994.png)]
3、松散语法
创建一个person类,包含firstName和age属性,我们在yaml中讲firstname写成first-name,然后进行绑定,最后是可以赋值的。
person类:

yaml文件:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-71cQh82M-1648719519198)(C:\Users\86177\AppData\Roaming\Typora\typora-user-images\image-20220331165623423.png)]](https://img-blog.csdnimg.cn/475b6120ca2f4bfe92823b6ae1c3c64d.png)
运行结果:

结论:
- 推荐使用yml
- 如果我们在业务中,只需要获取文件中的某个值,可以使用@value
- 如果我们专门编写了一个JavaBean来和配置文件进行映射,就推荐使用@configurationProperties
4、JSR303数据校验
JSR303技术,JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint,在springboot中使用也比较简便。(来自简书介绍)
SpringBoot中可以使用@Validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

5、多文档配置
使用yaml去实现只需要创建一个yaml配置文件即刻,中间通过---来进行分区
server:
port: 8081
spring:
profiles:
active: test #选择要激活的环境块
---
server:
port: 8082
spring:
profiles: test #配置环境的名称
---
server:
port: 8082
spring:
profiles: dev #配置环境的名称
运行结果:

配置文件加载位置以及优先级顺序:
SpringBoot启动会扫描以下位置的application.properties或者application.yaml文件作为SpringBoot的默认配置文件
- 优先级1:项目路径下的config文件夹配置文件
- 优先级2:项目路径下配置文件
- 优先级3:资源路径下的config文件夹配置文件
- 优先级3:资源路径下配置文件(默认)
优先级从高到低,高优先级的配置会覆盖低优先级的配置
浙公网安备 33010602011771号