<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>

          一個 yml 文件居然能玩出這么多花樣!

          共 8353字,需瀏覽 17分鐘

           ·

          2021-04-28 15:49

          什么是YAML

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

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

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

          基本語法

          • YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。
          • 數(shù)據(jù)結(jié)構(gòu)采用鍵值對的形式,即 鍵名稱: 值,注意冒號后面要有空格。
          • 每個清單(數(shù)組)成員以單行表示,并用短杠+空白(- )起始。或使用方括號([]),并用逗號+空白(, )分開成員。
          • 每個散列表的成員用冒號+空白(: )分開鍵值和內(nèi)容。或使用大括號({ }),并用逗號+空白(, )分開。
          • 字符串值一般不使用引號,必要時可使用,使用雙引號表示字符串時,會轉(zhuǎn)義字符串中的特殊字符(例如\n)。使用單引號時不會轉(zhuǎn)義字符串中的特殊字符。
          • 大小寫敏感
          • 使用縮進(jìn)表示層級關(guān)系,縮進(jìn)不允許使用tab,只允許空格,因?yàn)橛锌赡茉诓煌到y(tǒng)下tab長度不一樣
          • 縮進(jìn)的空格數(shù)可以任意,只要相同層級的元素左對齊即可
          • 在單一文件中,可用連續(xù)三個連字號(—)區(qū)分多個文件。還有選擇性的連續(xù)三個點(diǎn)號(…)用來表示文件結(jié)尾。
          • '#'表示注釋,可以出現(xiàn)在一行中的任何位置,單行注釋
          • 在使用逗號及冒號時,后面都必須接一個空白字符,所以可以在字符串或數(shù)值中自由加入分隔符號(例如:5,280或http://www.wikipedia.org)而不需要使用引號。

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

          • 純量(scalars):單個的、不可再分的值
          • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
          • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)

          標(biāo)量

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

          • 字符串
          • 布爾值
          • 整數(shù)
          • 浮點(diǎn)數(shù)
          • Null
          • 時間
          • 日期
          # 字符串
          string.value: Hello!我是陳皮!
          # 布爾值,true或false
          boolean.value: true
          boolean.value1: false
          # 整數(shù)
          int.value: 10
          int.value1: 0b1010_0111_0100_1010_1110 # 二進(jìn)制
          # 浮點(diǎn)數(shù)
          float.value: 3.14159
          float.value1: 314159e-5 # 科學(xué)計(jì)數(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;
          }

          對象

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

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

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

          package com.nobody;

          import lombok.Getter;
          import lombok.Setter;
          import org.springframework.boot.context.properties.ConfigurationProperties;
          import org.springframework.context.annotation.Configuration;

          /**
           * @Description
           * @Author Mr.nobody
           * @Date 2021/4/13
           * @Version 1.0.0
           */

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

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

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

          數(shù)組

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

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

          也可以使用中括號進(jìn)行行內(nèi)顯示形式,如下:

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


          在代碼中引入方式如下:

          package com.nobody;

          import lombok.Getter;
          import lombok.Setter;
          import lombok.ToString;
          import org.springframework.boot.context.properties.ConfigurationProperties;
          import org.springframework.context.annotation.Configuration;

          import java.util.List;

          /**
           * @Description
           * @Author Mr.nobody
           * @Date 2021/4/13
           * @Version 1.0.0
           */

          @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
          package com.nobody;

          import lombok.Getter;
          import lombok.Setter;
          import lombok.ToString;
          import org.springframework.boot.context.properties.ConfigurationProperties;
          import org.springframework.context.annotation.Configuration;

          import java.util.List;

          @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<List<Integer>> twoArr;
          }

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

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

          文本塊

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

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

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

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

          顯示指定類型

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

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

          內(nèi)置的類型如下:

          • !!int:整數(shù)類型
          • !!float:浮點(diǎn)類型
          • !!bool:布爾類型
          • !!str:字符串類型
          • !!binary:二進(jìn)制類型
          • !!timestamp:日期時間類型
          • !!null:空值
          • !!set:集合類型
          • !!omap,!!pairs:鍵值列表或?qū)ο罅斜?/section>
          • !!seq:序列
          • !!map:散列表類型

          引用

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

          xiaohong: &xiaohong
            name: 小紅
            age: 20

          dept:
            id: D15D8E4F6D68A4E88E
            <<: *xiaohong

          上面最終相當(dāng)于如下:

          xiaohong:
            name: 小紅
            age: 20

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

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

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

          單文件多配置

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

          #公共配置
          spring:
            profiles:
              active: pro # 指定使用哪個文檔塊
          ---
          #開發(fā)環(huán)境配置
          spring:
            profiles: dev # profiles屬性代表配置的名稱

          server:
            port: 8080
          ---
          #生產(chǎn)環(huán)境配置
          spring:
            profiles: pro

          server:
            port: 8081

          來源:blog.csdn.net/chenlixiao007

          < END >

          推薦?? :1049天,100K!簡單復(fù)盤!

          推薦?? :年薪 40W Java 開發(fā)是什么水平?

          推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅

          我是 Guide哥,擁抱開源,喜歡烹飪。Github 接近 10w 點(diǎn)贊的開源項(xiàng)目 JavaGuide 的作者。未來幾年,希望持續(xù)完善 JavaGuide,爭取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊查看我的2020年工作匯報(bào)!
          原創(chuàng)不易,歡迎點(diǎn)贊分享。咱們下期再會!
          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  国产精品探花在线观看 | 韩国的毛片| 欧美A√ | 男女操逼视频在线播放 | 欧美亚洲成人网站 |