YAML是"YAML Ain't a Markup Language"(YAML不是一種标記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種标記語言),但為了強調這種語言以資料做為中心,而不是以标記語言為重點,而用反向縮略語重命名。
1、基本文法
key: value value和:之間有一個空格
大小寫敏感:區分大小寫
使用縮進表示層級關系
縮進不允許使用Tab,隻允許使用空格。在Idea中可以使用Tab
縮進的空格數不重要,隻要相同的層級的元素左對齊即可
例如我在yaml配置一個興趣,不管前面有多少個空格,隻要左對齊了,這三個興趣都是一個層級的
interests:
- 尤克裡裡
- 籃球
- 石原裡美
‘#’表示注釋
''和""表示字元串内容,會轉義/不會轉義。例如名字"Zhangsan \n 李四",單引号會原封不動的輸出,但是雙引号會将\n變成換行符輸出
2、資料類型
- 字面量:單個的、不可分的值。如Date、Boolean、String、Number、Null
k: v 直接寫就行,記得:和v之間有個空格,:隻能用英文
- 對象:鍵值對的集合 map hash set object,例如寵物類(k),寵物有姓名(k1),體重(k2)。
行内寫法:k: {k1:v1,k2:v2}
或者
k:
k1: v1,
k2: v2
- 數組:一組按次序排列的值 array,list,queue
行内寫法: k: [v1,v2,v3]
或者
k:
- v1
- v2
- v3
3、示例
package com.you.boot.bean;
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Data
@ToString
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String,Object>score;
private Set<Double> salarys;
private Map<String,List<Pet>>allPets;
}
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class Pet {
private String name;
private Double weight;
}
application.yaml,以後忘了寫法,看這個
person:
userName: Zhangsan
# 雙引号會轉義一些特殊字元
# 單引号不會轉義一些特殊字元 如/n
boss: true
birth: 2022/7/1
age: 1
# interests: [尤克裡裡,吉他]
interests:
- 尤克裡裡
- 籃球
- 石原裡美
animal: [旺财,小豬]
# score:
# english: 80
# math: 90
score: {english: 80,math: 90}
salarys: [1200.00,12000.00,9999.00]
pet:
name: 小豬
weight: 99.99
allPets:
sick:
- {name: 小豬,weight: 99.99}
- name: 小雞
weight: 88.88
- name: 阿貓
weight: 70.00
health:
- {name: 阿花,weight: 20.00}
- {name: 阿葉,weight: 30.00}
4、自定義類綁定的配置提示
自己寫的一些變量,在yaml編寫的時候沒有提示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
導入依賴後,重新開機一下項目,自己定義的變量就有提示了
我們寫的是userName,提示給的是user-name 也是可以的。
因為這一塊隻是友善我們程式設計,打包的時候沒有用,是以我們加上這一段代碼,讓項目打包的時候不打包這個處理器
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configurationprocessor</artifactId>
</exclude>
</excludes>
</configuration>