1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一個(gè) 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語言就會(huì)使用大量的標(biāo)記。

        YAML是一個(gè)可讀性高,易于理解,用來表達(dá)數(shù)據(jù)序列化的格式。它的語法和其他高級(jí)語言類似,并且可以簡(jiǎn)單表達(dá)清單(數(shù)組)、散列表,標(biāo)量等數(shù)據(jù)形態(tài)。它使用空白符號(hào)縮進(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)采用鍵值對(duì)的形式,即 鍵名稱: 值,注意冒號(hào)后面要有空格。
        • 每個(gè)清單(數(shù)組)成員以單行表示,并用短杠+空白(- )起始?;蚴褂梅嚼ㄌ?hào)([]),并用逗號(hào)+空白(, )分開成員。
        • 每個(gè)散列表的成員用冒號(hào)+空白(: )分開鍵值和內(nèi)容?;蚴褂么罄ㄌ?hào)({ }),并用逗號(hào)+空白(, )分開。
        • 字符串值一般不使用引號(hào),必要時(shí)可使用,使用雙引號(hào)表示字符串時(shí),會(huì)轉(zhuǎn)義字符串中的特殊字符(例如\n)。使用單引號(hào)時(shí)不會(huì)轉(zhuǎn)義字符串中的特殊字符。
        • 大小寫敏感
        • 使用縮進(jìn)表示層級(jí)關(guān)系,縮進(jìn)不允許使用tab,只允許空格,因?yàn)橛锌赡茉诓煌到y(tǒng)下tab長度不一樣
        • 縮進(jìn)的空格數(shù)可以任意,只要相同層級(jí)的元素左對(duì)齊即可
        • 在單一文件中,可用連續(xù)三個(gè)連字號(hào)(—)區(qū)分多個(gè)文件。還有選擇性的連續(xù)三個(gè)點(diǎn)號(hào)(…)用來表示文件結(jié)尾。
        • '#'表示注釋,可以出現(xiàn)在一行中的任何位置,單行注釋
        • 在使用逗號(hào)及冒號(hào)時(shí),后面都必須接一個(gè)空白字符,所以可以在字符串或數(shù)值中自由加入分隔符號(hào)(例如:5,280或http://www.wikipedia.org)而不需要使用引號(hào)。

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

        • 純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值
        • 對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
        • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)

        標(biāo)量

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

        • 字符串
        • 布爾值
        • 整數(shù)
        • 浮點(diǎn)數(shù)
        • Null
        • 時(shí)間
        • 日期
        # 字符串
        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: ~
        # 時(shí)間,時(shí)間使用ISO 8601格式,時(shí)間和日期之間使用T連接,最后使用+代表時(shí)區(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;
        }

        對(duì)象

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

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

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

        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ù)組的每一個(gè)元素,如下的address字段:

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

        也可以使用中括號(hào)進(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ù)組字段的成員也是一個(gè)數(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ù)組成員是一個(gè)對(duì)象,則用如下兩種形式形式:

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

        文本塊

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

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

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

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

        顯示指定類型

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

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

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

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

        引用

        引用會(huì)用到 &錨點(diǎn)符合和 星號(hào)符號(hào),&用來建立錨點(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

        單文件多配置

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

        #公共配置
        spring:
          profiles:
            active: pro # 指定使用哪個(gè)文檔塊
        ---
        #開發(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!簡(jiǎn)單復(fù)盤!

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

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

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            三及片免费看 | 久久久国产精品女同三区 | 国产美a三级三级看三级 | 激情久久五月天 | 无码视频免费在线播放 | 黄色视频免费收看黄色视频免费收看 | 久久肏逼精彩视频 | 五月丁香伊人 | 高清无码在线免费 | zzijzzijzzij日本视频 |