Spring Boot————YAML配置檔案
引言
首先,YAML並不是僅僅可以使用在Java專案中,它是一種類似於json結構的標記語言,可以為所有的程式語言服務。它強調更直觀的層級表示,比較適合描述配置檔案中的層級關係。
Spring Boot可以識別字尾名為".properties"或“.yaml”或“.yml” 的全域性配置檔案。以yaml或yml為字尾的配置檔案都是YAML檔案。
一、與其他配置格式的比較
與其他配置檔案的格式比較,yaml的表達方式既有直觀突出的層級結構,同時又不會冗餘重複:
.properties配置方式:
.xml配置方式:
.yml配置方式:
不難看出,兼顧層級結構而又簡潔明快的配置方式當然YAML是最好的選擇。
二、YAML基本語法
2.1 表示式
YAML用一個鍵值對來表示每個屬性(大小寫敏感),類似於json但卻不需要大括號,用冒號分割Key和Value的同時需要在冒號後面加入一個強制的空格:
key: value
舉例:
2.2 層級表示
YAML採用換行並縮排的方式來表達父節點與子節點、物件與屬性之間的關係,同級的節點或屬性要嚴格保證相同的縮排:
2.3 字面量的表示
字面量包括數字、字串、布林值等,YAML中可以直接書寫字面量,而且一般的字串不需要加任何引號。而引號的使用一般與特殊字元有關:雙引號不會轉義特殊字元;單引號會轉義特殊字元。比如字串中包含 \n ,雙引號識別為換行,單引號會識別為 \n 。
2.4 物件的表示
YAML為物件的表示提供了兩種表達方式:層級縮排、行內表達。
層級縮排如2.2所示只需要縮排保持對齊,就可以完整的表達一個物件。另一種行內表達的方式如下:
和JSON結構體類似,不過需要注意強制空格,和不加引號。
2.5 陣列或List
同樣有兩種寫法:層級縮排和行內表達。
層級縮排的方式,因為屬性的值是多個,所以與一般的屬性定義略有不同,每個元素換行縮排之後需要在前面加一個短橫線 - ,然後強制空格:
行內表達的方式,注意是中括號 [ ] :
三、獲取配置檔案(不限於YAML)中的值
Spring Boot預設使用SnakeYAML解析YAML檔案。
使用配置檔案的時候,除了修改Spring Boot提供的預設配置以外(如修改埠),我們還可以在配置檔案中定義完全屬於自己的物件,比如一個全域性唯一的管理員物件。
Administrator:
name: Morty
age: null
gender: MALE
role: admin
permission: all
定義JavaBean,並使用註解@ConfigurationProperties。
測試:
@RunWith(SpringRunner.class)
@SpringBootTest
public class AdminTest {
@Autowired
private Admin admin;
@Test
public void test() {
System.out.println("管理員:" + admin);
}
}
執行結果:
另外,除了@ConfigurationProperties註解之外,單獨取得某個值還可以使用@Value,它們之間的區別:
關於@ConfigurationProperties和@Value 兩個註解之間詳細的區別,參考《Spring Boot————@ConfigurationProperties與@Value》。
當然,業務開發中採用在配置檔案中定義實體bean的方式是比較愚蠢的。所以,在大多數應用開發場景中,@Value要比@ConfigurationProperties註解用途更廣。然而在Spring Boot的自動配置原理中(參見《Spring Boot面試殺手鐗————自動配置原理》),Spring Boot就是使用@ConfigurationProperties完成從配置檔案到XxxxProperties物件的對映繫結的,因此,理解這種批量匯入屬性的方式是有必要的。
綜上,就是關於YAML配置檔案語法的簡單講解和Spring Boot從配置檔案中的取值方式,歡迎各位看官文末留言。