YAML 語法
個(gè)人感覺這篇文檔屬于"搬運(yùn)工"性質(zhì)
可以查看官方或者其他的博客資料,會(huì)有一大堆的內(nèi)容
YAML語言的設(shè)計(jì)參考了JSON,XML和SDL等語言渣玲。YAML 強(qiáng)調(diào)以數(shù)據(jù)為中心,簡(jiǎn)潔易讀,編寫簡(jiǎn)單箱舞。
有意思的命名:
AML全稱是”YAML Ain’t a Markup Language”(YAML不是一種置標(biāo)語言)的遞歸縮寫。
在開發(fā)的這種語言時(shí)羽峰,YAML 的意思其實(shí)是:”Yet Another Markup Language”(仍是一種置標(biāo)語言)限寞。
語法特點(diǎn)
- 大小寫敏感
- 通過縮進(jìn)表示層級(jí)關(guān)系
- 禁止使用tab縮進(jìn)履植,只能使用空格鍵 (個(gè)人感覺這條最重要)
- 縮進(jìn)的空格數(shù)目不重要玫霎,只要相同層級(jí)左對(duì)齊即可
- 使用#表示注釋
支持的數(shù)據(jù)結(jié)構(gòu)
- 對(duì)象:鍵值對(duì)的集合庶近,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數(shù)組:一組按次序排列的值鼻种,又稱為序列(sequence) / 列表(list)
- 純量(scalars):?jiǎn)蝹€(gè)的叉钥、不可再分的值
雙引號(hào)和單引號(hào)的區(qū)分
雙引號(hào)""
:不會(huì)轉(zhuǎn)義字符串里面的特殊字符投队,特殊字符作為本身想表示的意思爵川。
name: "123\n123"
---------------------------
輸出: 123 換行 123
如果不加引號(hào)
將會(huì)轉(zhuǎn)義特殊字符,當(dāng)成字符串處理
值的寫法
1.字符串
使用”或”“或不使用引號(hào)
value0: 'hello World!'
value1: "hello World!"
value2: hello World!
2.布爾值
true
或false
表示扒披。
3.數(shù)字
12 #整數(shù)
014 # 八進(jìn)制整數(shù)
0xC #十六進(jìn)制整數(shù)
13.4 #浮點(diǎn)數(shù)
1.2e+34 #指數(shù)
.inf空值 #無窮大
4.空值
null
或~
表示
5.日期
使用 iso-8601 標(biāo)準(zhǔn)表示日期
date: 2018-01-01t16:59:43.10-05:00
在springboot中yaml文件的時(shí)間格式 date: yyyy/MM/dd HH:mm:ss
6.強(qiáng)制類型轉(zhuǎn)換(了解)
YAML 允許使用個(gè)感嘆號(hào)!
谎碍,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型洞焙,單嘆號(hào)
通常是自定義類型拯啦,雙嘆號(hào)
是內(nèi)置類型褒链。
money: !!str
123
date: !Boolean
true
內(nèi)置類型列表
!!int # 整數(shù)類型
!!float # 浮點(diǎn)類型
!!bool # 布爾類型
!!str # 字符串類型
!!binary # 也是字符串類型
!!timestamp # 日期時(shí)間類型
!!null # 空值
!!set # 集合
!!omap,!!pairs # 鍵值列表或?qū)ο罅斜?!!seq # 序列,也是列表 !!map # 鍵值表
7.對(duì)象(重點(diǎn))
Map(屬性和值)(鍵值對(duì))的形式:
key:(空格)v :表示一堆鍵值對(duì)兵迅,空格不可省略恍箭。
car:
color: red
brand: BMW
一行寫法
car:{color: red扯夭,brand: BMW}
相當(dāng)于JSON格式:
{"color":"red","brand":"BMW"}
8.數(shù)組
一組連詞線開頭的行交洗,構(gòu)成一個(gè)數(shù)組橡淑。
brand:
- audi
- bmw
- ferrari
一行寫法
brand: [audi,bmw,ferrari]
相當(dāng)于JSON
["auri","bmw","ferrari"]
9.文本塊
|:使用|
標(biāo)注的文本內(nèi)容縮進(jìn)表示的塊梁棠,可以保留塊中已有的回車換行
value: |
hello
world!
輸出結(jié)果:hello 換行 world置森!
+
表示保留文字塊末尾的換行,-
表示刪除字符串末尾的換行。
value: |
hello
value: |-
hello
value: |+
hello
輸出:hello\n hello hello\n\n(有多少個(gè)回車就有多少個(gè)\n)
注意 “|” 與 文本之間須另起一行
>:使用 >
標(biāo)注的文本內(nèi)容縮進(jìn)表示的塊蜜笤,將塊中回車替換為空格,最終連接成一行
value: > hello
world!
輸出:hello 空格 world把兔!
注意 “>” 與 文本之間的空格
10.錨點(diǎn)與引用
使用 &
定義數(shù)據(jù)錨點(diǎn)(即要復(fù)制的數(shù)據(jù))沪伙,使用 *
引用錨點(diǎn)數(shù)據(jù)(即數(shù)據(jù)的復(fù)制目的地)
name: &a yaml
book: *a
books:
- java
- *a
- python
輸出book: yaml
輸出books:[java,yaml,python]
注意*
引用部分不能追加內(nèi)容
配置文件注入數(shù)據(jù)
/**
* 將配置文件中配置的每一個(gè)屬性的值县好,映射到這個(gè)組件中
* @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定围橡;
* prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
*
* 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能缕贡;
*
*/
@Component //實(shí)例化
@ConfigurationProperties(prefix = "person")//yaml或者properties的前綴
public class Person {
private String name;
private Integer age;
private Boolean flag;
private Date birthday;
private Map<String,Object> maps;
private List<Object> tempList;
private Dog dog;
//省略getter和setter以及toString方法
我們可以導(dǎo)入配置文件處理器拣播,以后編寫配置就有提示了贮配,@ConfigurationProperties
IDE會(huì)提示打開在線的幫助文檔泪勒,配置依賴如下:
<!--導(dǎo)入配置文件處理器圆存,配置文件進(jìn)行綁定就會(huì)有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
application.yaml文件
person:
name: 胖先森
age: 18
flag: false
birthday: 2018/12/19 20:21:22 #Spring Boot中時(shí)間格式
maps: {bookName: "西游記",author: '吳承恩'}
tempList:
- 紅樓夢(mèng)
- 三國(guó)演義
- 水滸傳
dog:
dogName: 大黃
dogAge: 4
在test中進(jìn)行測(cè)試如下
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo03BootApplicationTests {
@Autowired
private Person p1;
@Test
public void contextLoads() {
System.out.println(p1);
}
}
輸出結(jié)果為:Person{name='胖先森', age=18, flag=false, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=西游記, author=吳承恩}, tempList=[紅樓夢(mèng), 三國(guó)演義, 水滸傳], dog=Dog{dogName='大黃', dogAge=4}}
application.properties文件
person123.name=劉備
person123.age=20
person123.birthday=2018/12/19 20:21:22
person123.maps.bookName=水滸傳
person123.maps.author=羅貫中
person123.temp-list=一步教育,步步為贏
person123.dog.dogName=小白
person123.dog.dogAge=5
java代碼修改前綴
@Component //實(shí)例化
@ConfigurationProperties(prefix = "person123")//yaml或者properties的前綴
public class Person {
private String name;
private Integer age;
private Boolean flag;
private Date birthday;
private Map<String,Object> maps;
private List<Object> tempList;
private Dog dog;
//省略getter和setter以及toString方法
在test中進(jìn)行測(cè)試如下
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo03BootApplicationTests {
@Autowired
private Person p1;
@Test
public void contextLoads() {
System.out.println(p1);
}
}
輸出結(jié)果為:Person{name='????????????', age=20, flag=null, birthday=Wed Dec 19 20:21:22 CST 2018, maps={bookName=???°′???, author=???T1?????????}, tempList=[ò???????????????????, ?????????????aó?], dog=Dog{dogName='D???????', dogAge=5}}
屬性文件中文亂碼問題