SpringBoot YAML語法基礎詳細整理
YAML
Spring Boot 提供了大量的自動配置,極大地簡化了spring 應用的開發(fā)過程,當用戶創(chuàng)建了一個 Spring Boot 項目后,即使不進行任何配置,該項目也能順利的運行起來。當然,用戶也可以根據(jù)自身的需要使用配置文件修改 Spring Boot 的默認設置。
SpringBoot 默認使用以下 2 種全局的配置文件,其文件名是固定的。
- application.properties
- application.yml/yaml
其中,application.yml 是一種使用 YAML 語言編寫的文件,它與 application.properties一樣,可以在 Spring Boot 啟動時被自動讀取,修改 Spring Boot 自動配置的默認值。
YAML 簡介
YAML 全稱 YAML Ain't Markup Language,它是一種以數(shù)據(jù)為中心的標記語言,比 XML 和 JSON 更適合作為配置文件。
想要使用 YAML 作為屬性配置文件(以 .yml 或 .yaml 結(jié)尾),需要將 SnakeYAML 庫添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都對 SnakeYAML 庫做了集成, 只要項目中引用了這兩個 Starter 中的任何一個,Spring Boot 會自動添加 SnakeYAML 庫到 classpath 下。
YAML 語法
YAML 的語法如下:
- 使用縮進表示層級關系。
- 縮進時不允許使用 Tab 鍵,只允許使用空格。(可設置Tab替換四個空格)
- 縮進的空格數(shù)不重要,但同級元素必須左側(cè)對齊。
- 大小寫敏感。
- #表示注釋。
YAML 常用寫法
YAML 支持以下幾種數(shù)據(jù)結(jié)構(gòu):
- 普通的值(數(shù)字、字符串、布爾、日期)
- 對象 屬性值的集合
- 數(shù)組 一組按次序排列的值
- 集合 List、Set 與數(shù)組一樣,Map與對象一樣鍵值對的集合
普通值(字面量)
- 字面量是指單個的,不可拆分的值,例如:數(shù)字、字符串、布爾值、以及日期等。
- 在 YAML 中,使用“key:[空格]value”的形式表示一對鍵值對(空格不能省略)
- 字面量直接寫在鍵值對的“value”中即可,且默認情況下字符串是不需要使用單引號或雙引號的
username: root
password: 123456
若字符串使用單引號,則不會轉(zhuǎn)義特殊字符,特殊字符會輸出為其本身想表達的含義
username1: 'zhangsan \n lisi'
輸出:zhangsan \n lisi
若字符串使用雙引號,則會轉(zhuǎn)義特殊字符,\n代表換行
username2: "zhangsan \n lisi"
輸出:'zhangsan lisi'
對象(屬性和值)、Map(鍵值對)
它們都是一對鍵值對,YAML 為對象提供了 2 種寫法
普通寫法 ,使用縮進表示對象與屬性的層級關系。
map1:
name: 張三
age: 23
行內(nèi)寫法
map2: {name: 李四,age: 24}
@ConfigurationProperties獲取鍵值對數(shù)據(jù)
@Value獲取鍵值對數(shù)據(jù)
@Value獲取map數(shù)據(jù)
map解析中,字符串一定要用"“把map所對應的value包起來,要不然解析會失敗,導致不能轉(zhuǎn)成 Map<StrObject>
test:
map: "{name: '李四',age: 24}"
@Component @Data public class Test { @Value("#{${test.map}}") private Map<String,Object> map; }
這里說明一下,獲取的map值是Test(map={name=李四, age=24})這樣的,數(shù)據(jù)是在{}里的
YAML語法中如果一個值以 “{” 開頭, YAML 將認為它是一個字典, 所以我們必須如下方式引用它
map: "{name: '李四',age: 24}"
數(shù)組、list、set
YAML 使用“-”表示數(shù)組、list、set 中的元素
普通寫法
array1:
- 張三
- 李四
list1:
- 23
- 24
行內(nèi)寫法
array2: [王五,毛六]
list2: [25,26]
@ConfigurationProperties獲取數(shù)組與集合數(shù)據(jù)
@Value根據(jù)索引獲取數(shù)組與集合單個元素數(shù)據(jù)
想從yml配置文件中讀取數(shù)組,但是按照yml配置數(shù)組的形式有點麻煩,可以使用字符串去模擬數(shù)組
test:
list: 張三,李四,王五
spring默認時按照逗號進行分割的,所以代碼中可以寫成
@Component @Data public class Test { @Value("${test.list}") private List<String> list; }
另外,@Value注解是支持SpEL表達式的,所以還可以寫成
@Component @Data public class Test { @Value("#{'${test.list}'.split(',')}") private List<String> list; }
復合結(jié)構(gòu)
以上幾種數(shù)據(jù)結(jié)構(gòu)可以任意組合使用,以實現(xiàn)不同的用戶需求
比如List中放Map
test:
listInMap:
- name: 張三
age: 23
- name: 李四
age: 24
- {name: 王五,age: 25}
YAML 組織結(jié)構(gòu)
一個 YAML 文件可以由一個或多個文檔組成,文檔之間使用“---”作為分隔符,且個文檔相互獨立,互不干擾。如果 YAML 文件只包含一個文檔,則“---”分隔符可以省略。
#默認配置
server:
port: 8080
#切換配置
spring:
profiles:
active: test
---
#開發(fā)環(huán)境
server:
port: 8081
spring:
config:
activate:
on-profile: dev
---
#測試環(huán)境
server:
port: 8082
spring:
config:
activate:
on-profile: test
---
#生產(chǎn)環(huán)境
server:
port: 8083
spring:
config:
activate:
on-profile: prod
到此這篇關于SpringBoot YAML語法基礎詳細整理的文章就介紹到這了,更多相關SpringBoot YAML內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
windows如何使用bat腳本后臺啟動/停止和重啟jar包服務
這篇文章主要介紹了windows使用bat腳本后臺啟動/停止和重啟jar包服務的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11SpringBoot+Mybatis+Vue 實現(xiàn)商品模塊的crud操作
這篇文章主要介紹了SpringBoot+Mybatis+Vue 實現(xiàn)商品模塊的crud操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10SpringCloud筆記(Hoxton)Netflix之Ribbon負載均衡示例代碼
這篇文章主要介紹了SpringCloud筆記HoxtonNetflix之Ribbon負載均衡,Ribbon是管理HTTP和TCP服務客戶端的負載均衡器,Ribbon具有一系列帶有名稱的客戶端(Named?Client),對SpringCloud?Ribbon負載均衡相關知識感興趣的朋友一起看看吧2022-06-06全鏈路監(jiān)控平臺Pinpoint?SkyWalking?Zipkin選型對比
這篇文章主要為大家介紹了全鏈路監(jiān)控平臺Pinpoint?SkyWalking?Zipkin實現(xiàn)的選型對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03