1. 程式人生 > >Spring Boot————YAML配置檔案

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從配置檔案中的取值方式,歡迎各位看官文末留言。