配置文件我們在之前用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