05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式

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中定义很多属性接收数据读取到的数据

05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式_第1张图片

读取全部数据

对象封装的方式: 先声明一个Environment对象用来封装yaml文件中的所有数据,然后使用@Autowired注解把yaml文件中的数据注入到Environment对象中

  • 通过Environment的getProperties("一级属性名.二级属性名……")方法从Environment对象中获取yaml文件中对应的数据
  • 缺点: 每次拿数据都要调用Environment对象的getProperties()方法比较繁琐

05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式_第2张图片

读取对象数据

Bean对象封装的方式: 首先向Spring容器中注册一个Bean用来封装yaml中的一组数据 ,然后使用@ConfigurationProperties注解的prefix属性指定读取yaml文件中的配置属性前缀,该前缀下的所有配置属性会封装到这个Bean对象中,默认按照配置属性名和Bean对象的属性名的映射关系进行封装

05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式_第3张图片

需求: 封装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

你可能感兴趣的:(SpringBoot,spring,boot,后端,java,Yaml文件格式,读取yaml文件数据)