yaml文件格式
语法格式
YAML(YAML Ain't Markup Language)
是一种数据序列化格式 , 具有容易阅读、容易与脚本语言交互、以数据为核心即重数据轻格式的特点
- YAML数据常见的文件扩展名有
yml格式(主流)和yaml格式
两种
YAML文件的语法格式
: 属性层级关系使用多行和缩进
描述(同层级左侧对齐),每行结尾使用冒号结束, 属性值前面添加空格(只允许使用空格即不允许使用Tab键)
- YAML文件对大小写敏感 , 使用
#
号表示注释
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
在书写字符串时,如果属性值中包含特殊字符
如转义字符,此时可以将数据字符串使用双引号包裹起来表示作为字符解析(默认不做处理)
lesson: "Spring\tboot\nlesson"
yaml格式表示数组
: 在属性名书写位置的下方使用-
作为数据开始符号(要与数据间使用空格分隔),一个-
号对应数组的一个元素
- 数组书写缩略格式:
属性名: [数组元素]
- 对象数组缩略格式:
属性名: [{},{}]
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
#数组书写缩略格式
likes: [王者荣耀,刺激战场]
#对象数组格式一
users:
- name: Tom
age: 4
- name: Jerry
age: 5
#对象数组格式二
users:
-
name: Tom
age: 4
-
name: Jerry
age: 5
#对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
读取yaml文件数据的三种方式
yaml
文件就是专门用来定义数据的, 这些数据大部分是给SpringBoot框架内部使用,当然我们自己也可以配置一些数据自己使用
读取单一数据
属性名引用方式: 先使用${一级属性名.二级属性名……}
读取yaml文件中定义的数据,然后使用@Value注解
把读取的值注入到Bean的属性上
- 缺点: 如果yaml文件中定义的数据量过大,需要在Bean中定义很多属性接收数据读取到的数据
读取全部数据
对象封装的方式
: 先声明一个Environment对象
用来封装yaml文件中的所有数据,然后使用@Autowired注解
把yaml文件中的数据注入到Environment对象中
- 通过
Environment的getProperties("一级属性名.二级属性名……")
方法从Environment对象中获取yaml文件中对应的数据 - 缺点: 每次拿数据都要调用
Environment对象的getProperties()方法
比较繁琐
读取对象数据
Bean对象封装的方式
: 首先向Spring容器中注册一个Bean
用来封装yaml中的一组数据 ,然后使用@ConfigurationProperties注解的prefix属性
指定读取yaml文件中的配置属性前缀,该前缀下的所有配置属性会封装到这个Bean对象中,默认按照配置属性名和Bean对象的属性名的映射关系进行封装
需求: 封装yaml配置文件中datasource配置项
的相关属性
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm db?serverTimezone=UTC
username: root
password: root
@Component
// 封装yaml文件中配置项前缀为datasource下的相关数据
@ConfigurationProperties(prefix ="datasource")
public class DataSource {}
private String driverClassName;
private String url;
private String userName;
private String password;
}
yaml文件中的数据引用
当你在编写yaml数据时, 如果发现很多个配置项都具有相同的目录前缀 ,此时你可以先在yaml文件中定义一个配置属性并指定数据
,然后使用${属性名}
方式引用配置属性的值
center:
dataDir: D:/usr/local/fire/data
tmpDir: D:/usr/local/fire/tmp
logDir: D:/usr/local/fire/log
msgDir: D:/usr/local/fire/msgDir
#使用${属性名}方式引用属性值
baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDir