配置文件我們在之前用properties作為配置文件,SpringBoot還兼容另外一種配置文件格式-yaml

只要有全局配置文件,不管是appilcation.properties還是application.yml,哪怕兩個都有,都會生效,這兩個合並起來一起生效
1.文件類型
1.1 properties
同以前的properties
1.2 yaml
1.2.1 簡介
YAML 是 "YAML Ain't Markup Language"(YAML 不是一種標記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。
非常適合用來做以數據為中心的配置文件
1.2.2 基本語法
- key: value;kv之間有空格
- 大小寫敏感
- 使用縮進表示層級關系
- 縮進不允許使用tab,只允許空格(idea中無所謂)
- 縮進的空格數不重要,只要相同層級的元素左對齊即可
- '#'表示注釋
- 字符串無需加引號,如果要加,''與""表示字符串內容 會被 轉義/不轉義
1.2.3 數據類型
- 字面量:單個的、不可再分的值。date、boolean、string、number、null
k: v
- 對象:鍵值對的集合。map、hash、set、object
因為對象里面都有屬性
兩種寫法:
-
- 行內寫法
k: {k1:v1,k2:v2,k3:v3}
-
- 對象表示法
k: k1: v1 k2: v2 k3: v3
- 數組:一組按次序排列的值。array、list、queue

案例:

Person.java
package com.huawei.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;
@ConfigurationProperties(prefix = "person")
@Component // 在類上加上該注解,代表是容器中的組件了
@ToString
@Data
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;
}
Pet.java
@ToString
@Data
public class Pet {
private String name;
private Double weight;
}
HelloController.java
package com.huawei.boot.Controller;
import com.huawei.boot.bean.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
Person person;
@RequestMapping("/person")
public Person person () {
return person;
}
}
Boot01Helloworld2Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Boot01Helloworld2Application {
public static void main(String[] args) {
SpringApplication.run(Boot01Helloworld2Application.class, args);
}
}
application.yml
person:
userName: zhangsan
boss: true
birth: 2019/12/9
age: 19
# interests: [籃球,足球]
interests:
- 籃球
- 羽毛球
- 橄欖球
animal: [阿貓, 阿狗]
score:
english: 80
math: 90
salarys:
- 999.98
- 999.99
pet: {name: 阿狗, weight: 99.89}
allPets:
sick:
- {name: tom, weight: 44.22}
- {name: jerry, weight:33.33}
- name: 啊貓
weight: 92.33
- name: 啊蟲
weight: 77.77
health:
- {name: 阿花, weight: 199.55}
- {name: 啊明, weight: 111.11}
啟動服務器后,瀏覽器中:

通過@ConfigurationProperties(prefix = "person")可以將Person類與application.yml綁定起來
@ConfigurationProperties的作用:
將配置文件中配置的每一個屬性的值,映射到這個組件中,告訴SpringBoot將本類中的所有屬性和配置文件中相關的配置進行綁定。
參數prefix="person":將配置文件中的person下面的所有屬性一一對應
只有這個組件是容器中的組件,才能使用容器提供的@ConfigurationProperties功能,因此要加上@Component,表明注冊bean
2.自定義類綁定的配置提示
自定義的類和配置文件綁定一般沒有提示,下面實現在yml中寫的時候,能自動提示
在pom.xml中加入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
重啟一下
在application.yml中,寫的時候,就會有提示了

在開發期間,我們有提示了,但是在開發完成后,在我們SpringBoot的打包插件中重新打包的時候,不要把配置處理器打包到jar包中
再在pom.xml中添加:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
加載指定的配置文件,即文件名不是application.properties可以用下面的方法

在application.yml中使用隨機符號

注意:
配置文件如果用application.properties在寫中文的時候,會有亂碼,我們需要去IEDA中設置編碼格式為UTF-8

