Spring Boot弱化配置的特性让属性配置文件的使用也更加便捷,它默认支持对application.properties或application.yml属性配置文件处理。那么这两者完全一样吗?肯定不是啦!本文就来和大伙重点介绍下yaml配置。
1、YAML是什么
YAML是JSON的一个超集,是一种方便的定义层次配置数据的格式,结构层次上清晰明了,配置简单易读、易用。要想使用YAML作为属性配置文件,需要将SnakeYAML库添加到classpath下,Spring Boot对SnakeYAML库也做了集成,例如使用spring-boot-starter-web或spring-boot-starter都会自动添加SnakeYAML库到classpath下。下面是一个简单的application.yml属性配置文件。
server:
port: 8082
servlet:
context-path: /macay
2、基本用法
1、基本语法
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 大小写需敏感
2、值的写法
(1)、值是字面值
字面量直接用类似 k:v 这种键值对来表示,字面量包含数字、字符串、布尔值或者日期。对于字符串有下面的约束:
- 如果有字符串,默认不用加上单引号或者双引号
- “ ”:双引号不会转义字符串里面的特殊字符,特殊字符依然是本身的意思
- ’ ': 单引号会转义字符串里面的特殊字符
(2)、值是对象(Map)
对象表示一组键值对,可以分行写,键值后面使用冒号,冒号后面加空格,如 :
user:
username:macay
password:123456
也可以在一行内写出所有键值对,需使用 {k:v},如:
user:{'username':macay,'password':123456}
(3)、值是数组
数组如果分行写,需要使用 -…,比如:
person:
- Tom
- Jery
- Macay
数组如果行内写,则使用 […, …],比如:
person:[Tom,Jery,Macay]
(4)列表类型:
列表元素在进行属性值注入的时候可以使用List或Set存储。
Spring Boot还支持复杂类型的列表元素,例如如下属性值配置:
server:
list:
- name:app-1
address:
- 192.168.60.66
- 192.168.60.67
- name:app-2
address:
- 192.168.60.68
- 192.168.60.69
3、基本使用
yaml文件也具备properties文件的用法,比如4个默认路径、自定义路径、自定义名字、多环境配置等,参考这篇文章:详解配置文件 application.properties
当然,当然yaml配置也不是万能的,例如,yaml配置目前不支持@PropertySource注解。但是基础的 @ConfigurationProperties注解还是支持的。