天天看點

【SpringBoot】薛定谔的yaml

YAML是"YAML Ain't a Markup Language"(YAML不是一種标記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種标記語言),但為了強調這種語言以資料做為中心,而不是以标記語言為重點,而用反向縮略語重命名。

 1、基本文法

key: value value和:之間有一個空格

大小寫敏感:區分大小寫

使用縮進表示層級關系

縮進不允許使用Tab,隻允許使用空格。在Idea中可以使用Tab

縮進的空格數不重要,隻要相同的層級的元素左對齊即可

例如我在yaml配置一個興趣,不管前面有多少個空格,隻要左對齊了,這三個興趣都是一個層級的

interests:

- 尤克裡裡

- 籃球

- 石原裡美

【SpringBoot】薛定谔的yaml

 ‘#’表示注釋

''和""表示字元串内容,會轉義/不會轉義。例如名字"Zhangsan \n 李四",單引号會原封不動的輸出,但是雙引号會将\n變成換行符輸出

2、資料類型

  • 字面量:單個的、不可分的值。如Date、Boolean、String、Number、Null
k: v 直接寫就行,記得:和v之間有個空格,:隻能用英文
  • 對象:鍵值對的集合 map hash set object,例如寵物類(k),寵物有姓名(k1),體重(k2)。

行内寫法:k: {k1:v1,k2:v2}

或者

k:

 k1: v1,

 k2: v2

  • 數組:一組按次序排列的值 array,list,queue 

行内寫法: k: [v1,v2,v3]

或者

k:

 - v1

 - v2

 - v3

3、示例

package com.you.boot.bean;

import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Data
@ToString
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String,Object>score;
    private Set<Double> salarys;
    private Map<String,List<Pet>>allPets;
}      
import lombok.Data;
import lombok.ToString;

@Data
@ToString
public class Pet {
    private String name;
    private Double weight;
}      

application.yaml,以後忘了寫法,看這個

person:
  userName: Zhangsan
#  雙引号會轉義一些特殊字元
#  單引号不會轉義一些特殊字元 如/n
  boss: true
  birth: 2022/7/1
  age: 1
#  interests: [尤克裡裡,吉他]
  interests:
          - 尤克裡裡
          - 籃球
          - 石原裡美
  animal: [旺财,小豬]
#  score:
#    english: 80
#    math: 90
  score: {english: 80,math: 90}
  salarys: [1200.00,12000.00,9999.00]
  pet:
    name: 小豬
    weight: 99.99
  allPets:
    sick:
      - {name: 小豬,weight: 99.99}
      - name: 小雞
        weight: 88.88
      - name: 阿貓
        weight: 70.00
    health:
      - {name: 阿花,weight: 20.00}
      - {name: 阿葉,weight: 30.00}      

4、自定義類綁定的配置提示

自己寫的一些變量,在yaml編寫的時候沒有提示。

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-configuration-processor</artifactId>
       <optional>true</optional>
</dependency>      

導入依賴後,重新開機一下項目,自己定義的變量就有提示了

【SpringBoot】薛定谔的yaml

我們寫的是userName,提示給的是user-name 也是可以的。

因為這一塊隻是友善我們程式設計,打包的時候沒有用,是以我們加上這一段代碼,讓項目打包的時候不打包這個處理器

【SpringBoot】薛定谔的yaml
<configuration>
     <excludes>
         <exclude>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configurationprocessor</artifactId>
         </exclude>
     </excludes>
</configuration>