什麼是 YAML
YAML 可以視爲是 JSON 的一個超集,是一種方便的定義層次配置數據的格式,結構層次上清晰明瞭,配置簡單易讀、易用。
YAML 的基本規則
- 大小寫敏感
- 使用縮進表示層級關係
- 禁止使用tab縮進,只能使用空格
- 縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級
- 使用#表示註釋
- 字符串可以不用引號標註
YAML 支持的數據結構
使用 : 表示一個鍵值對,對齊的縮進表示同一個map,同時也表示一個對象
# person.name person.age person.weight person.height
person:
name: ke
age: 22
weight: 60.0
height: 170.0
# person : {name : ke,age : 22,weight : 60.0,height : 170.0}
使用 {} 用 JSON格式也可以達到表達 map 的效果
person: {name: ke,age: 22,weight: 60.0,height: 170.0}
使用 - 來表示一個數組
person:
name: ke
age: 22
weight: 60.0
height: 170.0
brothers:
- Jack
- Jim
- John
使用 [ ] 同樣可以用來表示一個數組
person: {name: ke,age: 22,weight: 60.0,height: 170.0,brothers: [Jack,Jim,John]}
使用 | 來表示文字塊
word: |
This
is
a
word
使用 > 告訴YAML編譯器給所有新行加上條紋,並將輸入的文本作爲一個長行處理
SpringBoot 中的使用
在 application.yml 中的 spring.profiles.active 中指定使用環境
# spring.profiles.active
spring:
profiles:
active: dev
SpringBoot 會去調用對應的yml文件,調用規則爲 application-activeValue.yml (其中activeValue指的是spring.profiles.active 指定的值),例如,active是dev,則去使用的配置文件是 application-dev.yml,如果active是test,則使用的配置文件是 application-test.yml
指定使用環境 yml 文件,如果有屬性和 applicatioin.yml 重複,則使用環境的 yml文件會覆蓋 application.yml文件
#application.yml
spring:
profiles:
active: test
test: testString
#application-test.yml
test: testtesttest
# 此時SpringBoot中 test 的值是 testtesttest
注入一個Bean
package com.zyy.boot.bean;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(value = "person")
public class Person {
private String name;
private Integer age;
private Double weight;
private Double height;
private String[] brothers;
}
使用 @Value 獲取配置信息
package com.zyy.boot.controller;
import com.zyy.boot.bean.Person;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@Slf4j
public class TestController {
@Value("${test}")
private String testString;
@Value("${person.name}")
private String name;
@Autowired
private Person person;
@RequestMapping("test")
public String test(){
// testtesttest
log.info(testString);
// ke
log.info("{}",name);
// person : Person(name=ke, age=22, weight=60.0, height=170.0, brothers=[Jack, Jim, John])
log.info("person : {}",person);
return testString;
}
}