<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          YAML 文件的這些騷操作,你都會了嗎?

          共 4145字,需瀏覽 9分鐘

           ·

          2021-10-25 00:41

          點擊“藍字”,關注,置頂公眾號

          每日技術干貨,第一時間送達!


          1

          什么是YAML


          YAML是"YAML Ain’t a Markup Language"(YAML不是一種標記語言)的遞歸縮寫。YAML的意思其實是:“Yet Another Markup Language”(仍是一種標記語言)。主要強度這種語音是以數(shù)據(jù)為中心,而不是以標記語言為重心,例如像xml語言就會使用大量的標記。


          YAML是一個可讀性高,易于理解,用來表達數(shù)據(jù)序列化的格式。它的語法和其他高級語言類似,并且可以簡單表達清單(數(shù)組)、散列表,標量等數(shù)據(jù)形態(tài)。它使用空白符號縮進和大量依賴外觀的特色,特別適合用來表達或編輯數(shù)據(jù)結構、各種配置文件等。


          YAML的配置文件后綴為 .yml,例如Springboot項目中使用到的配置文件 application.yml 。



          2

          基本語法


          • YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。

          • 數(shù)據(jù)結構采用鍵值對的形式,即 鍵名稱: 值,注意冒號后面要有空格。

          • 每個清單(數(shù)組)成員以單行表示,并用短杠+空白(- )起始。或使用方括號([]),并用逗號+空白(, )分開成員。

          • 每個散列表的成員用冒號+空白(: )分開鍵值和內容。或使用大括號({ }),并用逗號+空白(, )分開。

          • 字符串值一般不使用引號,必要時可使用,使用雙引號表示字符串時,會轉義字符串中的特殊字符(例如\n)。使用單引號時不會轉義字符串中的特殊字符。

          • 大小寫敏感

          • 使用縮進表示層級關系,縮進不允許使用tab,只允許空格,因為有可能在不同系統(tǒng)下tab長度不一樣

          • 縮進的空格數(shù)可以任意,只要相同層級的元素左對齊即可

          • 在單一文件中,可用連續(xù)三個連字號(—)區(qū)分多個文件。還有選擇性的連續(xù)三個點號(…)用來表示文件結尾。

          • '#'表示注釋,可以出現(xiàn)在一行中的任何位置,單行注釋

          • 在使用逗號及冒號時,后面都必須接一個空白字符,所以可以在字符串或數(shù)值中自由加入分隔符號(例如:5,280或http://www.wikipedia.org)而不需要使用引號。

          ?


          3

          數(shù)據(jù)類型


          • 純量(scalars):單個的、不可再分的值

          • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)

          • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)


          標量


          標量是最基礎的數(shù)據(jù)類型,不可再分的值,他們一般用于表示單個的變量,有以下七種:


          • 字符串

          • 布爾值

          • 整數(shù)

          • 浮點數(shù)

          • Null

          • 時間

          • 日期


          # 字符串
          string.value: Hello!我是陳皮!
          # 布爾值,true或false
          boolean.value:?true
          boolean.value1:?false
          # 整數(shù)
          int.value:?10
          int.value1:?0b1010_0111_0100_1010_1110?# 二進制
          # 浮點數(shù)
          float.value:?3.14159
          float.value1:?314159e-5?# 科學計數(shù)法
          # Null,~代表null
          null.value: ~
          # 時間,時間使用ISO 8601格式,時間和日期之間使用T連接,最后使用+代表時區(qū)
          datetime.value: !!timestamp?2021-04-13T10:31:00+08:00
          # 日期,日期必須使用ISO 8601格式,即yyyy-MM-dd
          date.value: !!timestamp?2021-04-13


          這樣,我們就可以在程序中引入了,如下:


          @RestController
          @RequestMapping("demo")
          public class PropConfig {

          ????@Value("${string.value}")
          ????private String stringValue;

          ????@Value("${boolean.value}")
          ????private boolean booleanValue;

          ????@Value("${boolean.value1}")
          ????private boolean booleanValue1;

          ????@Value("${int.value}")
          ????private int intValue;

          ????@Value("${int.value1}")
          ????private int intValue1;

          ????@Value("${float.value}")
          ????private float floatValue;

          ????@Value("${float.value1}")
          ????private float floatValue1;

          ????@Value("${null.value}")
          ????private String nullValue;

          ????@Value("${datetime.value}")
          ????private Date datetimeValue;

          ????@Value("${date.value}")
          ????private Date datevalue;
          }


          對象


          我們知道單個變量可以用鍵值對,使用冒號結構表示 key: value,注意冒號后面要加一個空格。可以使用縮進層級的鍵值對表示一個對象,如下所示:


          person:
          ??name: 陳皮
          ??age:?18
          ??man: true


          然后在程序對這幾個屬性進行賦值到Person對象中,注意Person類要加get/set方法,不然屬性會無法正確取到配置文件的值。使用@ConfigurationProperties注入對象,@value不能很好的解析復雜對象。


          @Configuration
          @ConfigurationProperties(prefix =?"my.person")
          @Getter
          @Setter
          public class Person {
          ????private?String?name;
          ????private?int?age;
          ????private?boolean?man;
          }


          當然也可以使用 key:{key1: value1, key2: value2, ...}的形式,如下:


          person: {name: 陳皮,?age:?18,?man: true}


          數(shù)組


          可以用短橫桿加空格 -開頭的行組成數(shù)組的每一個元素,如下的address字段:


          person:
          ??name: 陳皮
          ??age:?18
          ??man: true
          ??address:
          ????- 深圳
          ????- 北京
          ????- 廣州


          也可以使用中括號進行行內顯示形式,如下:


          person:
          ??name: 陳皮
          ??age:?18
          ??man: true
          ??address: [深圳, 北京, 廣州]


          在代碼中引入方式如下:


          @Configuration
          @ConfigurationProperties(prefix =?"person")
          @Getter
          @Setter
          @ToString
          public?class?Person {
          ????private?String?name;
          ????private?int age;
          ????private?boolean?man;
          ????private?List<String> address;
          }


          如果數(shù)組字段的成員也是一個數(shù)組,可以使用嵌套的形式,如下:


          person:
          ??name: 陳皮
          ??age:?18
          ??man: true
          ??address: [深圳, 北京, 廣州]
          ??twoArr:
          ????-
          ??????-?2
          ??????-?3
          ??????-?1
          ????-
          ??????-?10
          ??????-?12
          ??????-?30


          @Configuration
          @ConfigurationProperties(prefix =?"person")
          @Getter
          @Setter
          @ToString
          public?class?Person {
          ????private?String?name;
          ????private?int age;
          ????private?boolean?man;java
          ????private?List<String> address;
          ????private?List> twoArr;
          }


          如果數(shù)組成員是一個對象,則用如下兩種形式形式:


          childs:
          ??-
          ????name: 小紅
          ????age:?10
          ??-
          ????name: 小王
          ????age:?15


          childs: [{name: 小紅,?age:?10}, {name: 小王,?age:?15}]


          ?

          4

          文本塊


          如果你想引入多行的文本塊,可以使用|符號,注意在冒號:和 |符號之間要有空格。


          person:
          ??name: |
          ????Hello Java!!
          ????I am fine!
          ????Thanks! GoodBye!


          它和加雙引號的效果一樣,雙引號能轉義特殊字符:


          person:
          ??name:?"Hello Java!!\nI am fine!\nThanks! GoodBye!"



          5

          顯示指定類型


          有時我們需要顯示指定某些值的類型,可以使用 !(感嘆號)顯式指定類型。!單嘆號通常是自定義類型,!!雙嘆號是內置類型,例如:


          # 指定為字符串
          string.value: !!str HelloWorld!
          # !!timestamp指定為日期時間類型
          datetime.value: !!timestamp?2021-04-13T02:31:00+08:00


          內置的類型如下:


          • !!int:整數(shù)類型

          • !!float:浮點類型

          • !!bool:布爾類型

          • !!str:字符串類型

          • !!binary:二進制類型

          • !!timestamp:日期時間類型

          • !!null:空值

          • !!set:集合類型

          • !!omap,!!pairs:鍵值列表或對象列表

          • !!seq:序列

          • !!map:散列表類型

          ?


          6

          引用


          引用會用到 &錨點符合和 星號符號,&用來建立錨點,<< 表示合并到當前數(shù)據(jù), 用來引用錨點。


          xiaohong: &xiaohong
          ??name: 小紅
          ??age: 20

          dept:
          ??id: D15D8E4F6D68A4E88E
          ??<<: *xiaohong


          上面最終相當于如下:


          xiaohong:
          ??name: 小紅
          ??age:?20

          dept:
          ??id: D15D8E4F6D68A4E88E
          ??name: 小紅
          ??age:?20


          還有一種文件內引用,引用已經(jīng)定義好的變量,如下:


          base.host:?https://chenpi.com
          add.person.url:?${base.host}/person/add


          ?

          7

          單文件多配置


          可以在同一個文件中,實現(xiàn)多文檔分區(qū),即多配置。在一個yml文件中,通過 — 分隔多個不同配置,根據(jù)spring.profiles.active 的值來決定啟用哪個配置


          #公共配置
          spring:
          ??profiles:
          ????active:?pro?# 指定使用哪個文檔塊


          #開發(fā)環(huán)境配置
          spring:
          ??profiles:?dev # profiles屬性代表配置的名稱
          server:
          ??port:?8080


          #生產環(huán)境配置
          spring:
          ??profiles:?pro
          server:
          ??port:?8081


          來源:blog.csdn.net/chenlixiao007



          往期推薦



          理解SpringAop,看這篇就夠了!記得收藏

          DataGrip果然不一般

          RabbitMQ的幾種工作模式和優(yōu)化建議

          扔掉 Postman ,試試 IntelliJ IDEA 自帶的插件!

          Java8日期處理方式,日常工作必備!

          SQL 有下面這些寫法的注意了



          瀏覽 19
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  豆花视频一区二区三区在线观看 | 一区二区亚洲 | 国产三级日本三级国产三级 | 欧美精品三级视频在线看 | 操逼无码免费 |