SpringBoot 系列:
【SpringBoot 框架】- 入門——環境搭建、工程熱部署、idea快捷創建SpringBoot項目
【SpringBoot 框架】- SpringBoot 原理分析
【SpringBoot 框架】- SpringBoot 配置文件
【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis
目錄
1. application.properties 配置文件
2. application.yml(application.yaml) 配置文件
2、使用註解 @ConfigurationProperties 映射
一、SpringBoot配置文件類型
SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話 ,就可以自己編寫配置文件進行相應配置,在我的上一篇博文SpringBoot原理分析(https://blog.csdn.net/One_L_Star/article/details/103056583)中,起步依賴spring-boot-starter-parent 中,有配置文件的引入,如下:
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>
可以看到,${basedir}/src/main/resources 表示資源的加載文件,資源文件包括下面三種格式的,也就是說,咱們在配置SpringBoot資源文件的時候都是以 application*.yml、application*.yaml、application*.properties文件格式,.yml 和 .yaml 文件相同,而且在配置的時候一般都以 application 命名,所以SpringBoot配置文件可以歸爲以下兩種:
- application.properties
- application.yml(application.yaml)
1. application.properties 配置文件
咱們可以創建 application.properties 配置文件去覆蓋 SpringBoot 的默認配置,可以在resources 文件夾下創建 application.properties 文件,這裏就以手動配置 Tomcat 端口去覆蓋SpringBoot 默認配置爲例,我們知道 Tomcat 默認打開端口是8080,咱們可以通過 application.properties 配置文件去修改這個默認配置:
server.port=8888
添加配置之後,運行項目
properties 文件是以鍵值對的形式編寫,可以看到,通過修改application.properties 配置文件,已經將 Tomcat 端口改爲 8888,覆蓋了之前的配置,由於 properties 文件在以往用的也比較多,較爲常見,這裏就不做過多講述,主要還是對 yml 配置文件進行學習。
2. application.yml(application.yaml) 配置文件
YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。YML文件的擴展名可以使用.yml或者.yaml。
【1】yml配置文件語法
yml 的配置可以分爲下面幾種,我們先在 resources 文件夾下面創建 application.yml 配置文件
- 配置普通數據
- 配置對象數據
- 配置Map數據
- 配置數組數據
配置普通數據:
- 語法: key: value
- eg:
name: onestar
注意:value前面有一個空格
配置對象數據:
- 語法1:
- key:
key1: value1
key2: value2
- key:
- 語法2:
- key: {key1: value1,key2: value2}
- eg:
person:
name: oneStar
age: 18
addr: yichun
#或者
person: {name: oneStar,age: 18,addr: yihcun}
注意:key1前面的空格個數不限定,在yml語法中,相同縮進代表同一個級別
配置Map數據:
- 配置Map數據和配置對象數據相同
- eg:
map:
key1: value1
key2: value2
配置數組數據:
- 語法1
- key:
- value1
- value2
- key:
- 語法2
- key: [value1,value2]
- eg:
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者
city: [beijing,tianjin,shanghai,chongqing]
#集合中的元素是對象形式
student:
- name: oneStar
age: 18
score: 100
- name: twoStar
age: 28
score: 88
- name: threeStar
age: 38
score: 90
注意:value1與之間的 - 之間存在一個空格
二、配置文件與配置類的屬性映射
配置文件中的配置,不管是 properties 文件還是 yml 文件,有一些配置 SpringBoot 會自動去識別,比如 server.port=8888 配置,但有一些我們自定義的配置,SpringBoot 並不能自動識別,怎樣才能讓 SpringBoot 認識自己配置的信息呢,這裏就有兩種方法:
-
使用註解 @Value 映射
-
使用註解 @ConfigurationProperties 映射
1、使用註解 @Value 映射
我們可以通過@Value註解將配置文件中的值映射到一個Spring管理的Bean的字段上,這裏以 yml 文件進行說明
- application.yml 配置如下:
person:
name: oneStar
age: 18
- 實體Bean代碼如下:
@Controller
public class QuickController {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private int age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "name="+name+",age="+age;
}
}
運行後,瀏覽器訪問地址:http://localhost:8080/quick 結果如下:
2、使用註解 @ConfigurationProperties 映射
使用 Value 映射能夠精確的匹配到某一屬性,但如果有很多屬性,就帶來了不便,因此,還可以使用 @ConfigurationProperties 映射,通過註解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射
- application.yml 配置如下:
person:
name: oneStar
age: 19
- 實體Bean代碼如下:
@Controller
@ConfigurationProperties(prefix = "person")
public class QuickController {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "name="+name+",age="+age;
}
}
運行後,瀏覽器訪問地址:http://localhost:8080/quick 結果如下:
注意:使用@ConfigurationProperties方式可以進行配置文件與實體字段的自動映射,但需要字段必須提供set方法纔可以,而使用@Value註解修飾的字段不需要提供set方法
下一篇:【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit