Spring Boot 使用一個全局的配置文件,配置文件名稱是固定的: application*.yml|yaml|properties
。html
Spring Boot 是基於約定的,因此不少配置都有默認值,配置文件的做用就是修改 Spring Boot 自動配置的默認值。java
若想使用自定義的配置替換默認配置,能夠編寫 application.properties 或 application.yml(application.yaml)配置文件進行配置。spring
yaml 文件格式是 YAML Aint Markup Language 編寫的,是一種直觀的可以被電腦識別的數據序列化格式。編程
yaml 文件容易被人類閱讀,容易和腳本語言交互的,能夠被支持 yaml 庫的不一樣的編程語言程序導入,好比: C,Python,Java 等。bash
yaml 文件是以數據爲核心的,比傳統的 xml 方式更加簡潔。app
yaml 文件的擴展名可使用 .yml 或者 .yaml。dom
語法要求嚴格:編程語言
一、空格不能省略;ide
二、以縮進來控制層級關係,只要是左邊對齊的一列數據都是同一個層級的;spring-boot
三、屬性和值的大小寫都是十分敏感的。
【語法】
key: value
【示例】
# 基礎類型賦值 String,int,boolean,Date... name: 張三 age: 23 happy: true birthday: 2021/7/24
【注意】
【語法】
key: value1: ×× value2: ×× ...
【示例】
# 寫法1 object_map_1: name: 張三 age: 23 # 寫法2 object_map_2: {name: 張三, age: 20}
【語法】
key: - value1 - value2 ...
【示例】
# Array、List、Set 中存放基本類型 # 寫法1 array_list_set_1: - 張三 - 李四 # 寫法2 array_list_set_2: - 張三 - 李四 # Array、List、Set 中存放對象類型 array_list_set_3: - student1: name: 張三 age: 23 - student2: name: 李四 age: 24
【說明】- 表示 Array、List、Set 中的一個元素
【示例】
key1: value1_${random.uuid} # 隨機 uuid key2: value2_${random.int} # 隨機 int key3: value3_${person.key3:other} # key3 存在取 key3 的值,不存在值爲:other
【語法】
stringKey1: value1 string-key2: value2
【說明】string-key2 等於 stringKey2,至關於駝峯命名
新建一個 Spring Boot 項目,建立 Student、Person 兩個實體類
public class Student { private String name; private Integer age; // 有參無參構造方法,get|set|toString方法 }
/* @ConfigurationProperties做用: 將配置文件中配置的每個屬性的值,映射到這個組件中; 告訴 Spring Boot 將本類中的全部屬性和配置文件中相關的配置進行綁定 參數 prefix = "person":將配置文件中的 person 下面的全部屬性一一對應 */ @Component @ConfigurationProperties(prefix = "person") public class Person { // 基本類型 private String name; private Integer age; private Boolean happy; private Date birthday; // Object、Map 類型 private Student student; private Map<String, Object> map; // Array、Set、List 類型存放基本數據類型 private String[] array; private Set<Object> set; private List<Object> list; // Array、Set、List 類型存放對象數據類型 private List<Student> array_set_list; // 佔位符 private List<Object> placeholder; // 鬆散綁定 private String humpNamed1; private String humpNamed2; }
【注意】點擊打開文檔後,該地址中的 Spring Boot 版本可能會找不到頁面,切換一個版本便可。2.5.3 改成 2.2.3.RELEASE
查看文檔,找到一個依賴,在 pom.xml 中引入依賴以後,Person 類中再也不爆紅提示,點擊 Hide notification 隱藏通知,需重啓 IDEA 配置註解處理器便可生效。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
將 src/main/resources 目錄下 application.properties 文件刪除,新建 application.yml 文件
Person: # 基本數據類型 name: 劉一 age: 21 happy: false birthday: 2021/7/24 # Object、Map 類型 student: name: 陳二 age: 22 map: key1: 張三 key2: name: 李四 age: 24 # Array、Set、List 類型存放基本數據類型 array: - 王五 - 25 set: - 趙六 - 26 list: - 孫七 - 27 # Array、Set、List 類型存放對象數據類型 array_set_list: - name: 周八 age: 28 - name: 吳九 age: 29 # 佔位符 placeholder: - 佔位符_${random.uuid} # 隨機 uuid - ${random.int} # 隨機 int - 北涯_${Person.name:other} # name 存在取 name 值,name 不存在取值:other - 北涯_${Person.name2:other} # name2 存在取 name2 值,name2 不存在取值:other # 鬆散綁定 humpNamed1: 駝峯命名1 hump-named2: 駝峯命名2
【測試】
@SpringBootTest class SpringbootYamlApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println("person = " + person.toString()); } }
【運行】
person = Person(name=劉一, age=21, happy=false, birthday=Sat Jul 24 00:00:00 CST 2021, student=Student(name=陳二, age=22), map={key1=張三, key2={name=李四, age=24}}, array=[王五, 25], set=[趙六, 26], list=[孫七, 27], placeholder=[佔位符_d95cca6a-ddad-4942-93ad-a7a75ce1f922, -19950, 北涯_劉一, 北涯_other], humpNamed1=駝峯命名1, humpNamed2=駝峯命名2)