Spring Boot — YAML

文章目录

  • 一、YAML 简介
  • 二、YAML 语法
    • 2.1、配置【基本】类型
    • 2.2、配置【Object、Map】类型
    • 2.3、配置【Array、List、Set】类型
    • 2.4、配置【占位符】
    • 2.5、配置【松散绑定】
  • 三、yaml 配置注入
    • 3.1、创建项目
    • 3.2、创建实体类
    • 3.3、创建配置文件
    • 3.4、测试

一、YAML 简介

yaml 文件格式是 YAML Aint Markup Language 编写的,是一种直观的能够被电脑识别的数据序列化格式。

yaml 文件容易被人类阅读,容易和脚本语言交互的,可以被支持 yaml 库的不同的编程语言程序导入,比如: C,Python,Java 等。

yaml 文件是以数据为核心的,比传统的 xml 方式更加简洁。

yaml 文件的扩展名可以使用 .yml 或者 .yaml。

传统格式 | 默认格式 :application*.properties,语法结构 :key=value

主流格式 | 官方推荐 :application*.yml,语法结构 :key:空格value

二、YAML 语法

语法要求严格:

  1. key:空格value,空格不能省略;
  2. 以空格缩进来控制层级关系;
  3. 只要是左边对齐的一列数据都是同层级的;
  4. 属性和值的大小敏感;
  5. #号注释。

2.1、配置【基本】类型

语法:

key: value

示例:

#基础类型赋值String,int,boolean,Date... 
name: 张三
age: 23
happy: true
birthday: 2021/7/24

注意:

  1. 字符串默认不用加引号;
  2. " ",双引号不会转义字符串中的特殊字符,特殊字符会作为本身表示的意思;例:Spring \n Boot,输出:Spring 换行 Boot
  3. ’ ’ ,单引号会转义特殊字符,特殊字符会作为普通字符一样输出。例:Spring \n Boot,输出:Spring \n Boot

2.2、配置【Object、Map】类型

语法:

key:value1: ××value2: ××...

示例:

#写法1
object_map_1:name: 张三age: 21#写法2
object_map_2: {name: 张三, age: 22}

2.3、配置【Array、List、Set】类型

语法:

key:- value1- value2...

示例:

#Array、List、Set中存放基本类型
array_list_set_1:- 张三- 李四#Array、List、Set中存放对象类型
array_list_set_3:- student1:name: 张三age: 23- student2:name: 李四age: 24

说明:- 表示 Array、List、Set 中的一个元素。

2.4、配置【占位符】

示例:

key1: value1_${random.uuid} 	  #随机uuid
key2: value2_${random.int} 		  #随机int
key3: value3_${person.key3:other} #key3存在取key3的值,key3不存在值为other

2.5、配置【松散绑定】

语法:

stringKey1: value1
string-key2: value2

说明:string-key2 等于 stringKey2,相当于驼峰命名。

三、yaml 配置注入

yaml 文件强大的地方是可以给我们的实体类直接注入匹配值。

3.1、创建项目

Spring Boot 项目默认项即可。略…

3.2、创建实体类

public class Student {private String name;private Integer age;// 有参无参构造方法,get|set|toString方法
}
/* @ConfigurationProperties 作用:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉 Spring Boot 将本类中的所有属性和配置文件中相关的配置进行绑定参数 prefix = "person":将配置文件中的 person 下面的所有属性一一对应
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {// 基本类型private String name;private Integer age;private Boolean happy;private Date birthday;// Object、Map 类型private Student student;private Map<String, Object> map;// Array、Set、List 类型存放基本数据类型private String[] array;private Set<Object> set;private List<Object> list;// Array、Set、List 类型存放对象数据类型private List<Student> array_set_list;// 占位符private List<Object> placeholder;// 松散绑定private String humpNamed1;private String humpNamed2;
}

此时 Person 类有爆红提示。
请添加图片描述
注意:点击打开文档后,该地址中的 Spring Boot 版本可能会找不到页面,切换一个版本即可。

示例:比如将 2.5.3 改为 2.2.3.RELEASE https://docs.spring.io/spring-boot/docs/2.5.3/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor

查看文档,找到一个依赖,在 pom.xml 中引入依赖之后,Person 类中不再爆红提示,点击 Hide notification 隐藏通知,需重启 IDEA 配置注解处理器即可生效。
请添加图片描述

<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-configuration-processorartifactId><optional>trueoptional>
dependency>

3.3、创建配置文件

将 src.main.resources 目录下 application.properties 文件删除,新建 application.yml 文件。

Person:#基本数据类型name: 刘一age: 21happy: falsebirthday: 2021/7/24#Object、Map类型student:name: 陈二age: 22map:key1: 张三key2:name: 李四age: 24#Array、Set、List类型存放基本数据类型array:- 王五- 25set:- 赵六- 26list:- 孙七- 27#Array、Set、List类型存放对象数据类型array_set_list:- name: 周八age: 28- name: 吴九age: 29#占位符placeholder:- 随机uuid_${random.uuid} 	    #随机uuid- 随机int_${random.int}  			#随机int- 三元运算符_${person.name:other}  #name存在取name值,name不存在取值other- 三元运算符_${person.name2:other} #name2存在取name2值,name2不存在取值other#松散绑定humpNamed1: 驼峰命名1hump-named2: 驼峰命名2

3.4、测试

@SpringBootTest
class SpringbootYamlApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println("person = " + person.toString());}}

运行:

person = Person(name=刘一, age=21, happy=false, birthday=Sat Jul 24 00:00:00 CST 2021, student=Student(name=陈二, age=22), map={key1=张三, key2={name=李四, age=24}}, array=[王五, 25], set=[赵六, 26], list=[孙七, 27], array_set_list=[Student(name=周八, age=28), Student(name=吴九, age=29)], placeholder=[随机uuid_ef2822d5-64bc-4eb4-82a0-ad676a1ef5c8, 随机int_365280990, 三元运算符_刘一, 三元运算符_other], humpNamed1=驼峰命名1, humpNamed2=驼峰命名2
)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部