1 SpringBoot配置文件類型和作用
-
SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用
application.properties
或者application.yml(application.yaml)
進行配置。SpringBoot默認會從Resources目錄下加載application.properties
或application.yml(application.yaml)
文件 -
其中,
application.properties
文件是鍵值對類型的文件,之前一直在使用,所以此處不在對properties文件的格式進行闡述。除了properties文件外,SpringBoot還可以使用yml文件進行配置。
2 application.yml
配置文件
- YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。
- YML文件的擴展名可以使用
.yml
或者.yaml
。
2.1 yml配置文件的語法
2.1.1 配置普通數據
- 語法:
key: value
- 注意:value之前有一個空格
2.1.2 配置對象數據
- 語法:
key:
key1: value1
key2: value2
或者:
key: {key1: value1,key2: value2}
注意:key1前面的空格個數不限定,在yml語法中,相同縮進代表同一個級別
person:
name: haohao
age: 31
addr: beijing
#或者
person: {name: haohao,age: 31,addr: beijing}
2.1.3 配置Map數據
同上面的對象寫法
2.1.4 配置數組(List、Set)數據
- 語法:
key:
- value1
- value2
或者:
key: [value1,value2]
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者
city: [beijing,tianjin,shanghai,chongqing]
#集合中的元素是對象形式
student:
- name: zhangsan
age: 18
score: 100
- name: lisi
age: 28
score: 88
- name: wangwu
age: 38
score: 90
注意:value1與之間的 - 之間存在一個空格
3 配置文件與配置類的屬性映射方式
3.1 註解@Value
映射
我們可以通過@Value
註解將配置文件中的值映射到一個Spring管理的Bean的字段上
- Controller
@Controller
public class QuickController {
@Value("${name}")
private String name;
@Value("${person.addr}")
private String addr;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "name: " + name + " addr: " + addr;
}
}
3.2 使用註解@ConfigurationProperties
映射
<!--@ConfigurationProperties 的執行器的配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
@Controller
@ConfigurationProperties(prefix="person")
public class Quick3Controller {
private String name;
private String addr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@RequestMapping("/quick3")
@ResponseBody
public String quick3(){
return "name: " + name + " addr: " + addr;
}
}