SpringBoot基礎(chǔ)回顧-3

### 1.5 全局配置文件

全局配置文件能夠?qū)σ恍┠J(rèn)配置值進(jìn)行修改傅蹂。Spring Boot使用一個application.properties或者application.yaml的文件作為全局配置文件买窟,該文件存放在src/main/resource目錄或者類路徑的/config裆悄,一般會選擇resource目錄吼拥。接下來但校,將針對這兩種全局配置文件進(jìn)行講解 :

#### 1.5.1 application.properties配置文件

使用Spring Initializr方式構(gòu)建Spring Boot項目時,會在resource目錄下自動生成一個空的application.properties文件枷踏,Spring Boot項目啟動時會自動加載application.properties文件菩暗。

我們可以在application.properties文件中定義Spring Boot項目的相關(guān)屬性,當(dāng)然旭蠕,這些相關(guān)屬性可以是系統(tǒng)屬性停团、環(huán)境變量、命令參數(shù)等信息掏熬,也可以是自定義配置文件名稱和位置?

```properties

server.port=8081

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.config.additional-location=

spring.config.location=

spring.config.name=application

```

接下來佑稠,通過一個案例對Spring Boot項目中application.properties配置文件的具體使用進(jìn)行講解?

演示:

預(yù)先準(zhǔn)備了兩個實體類文件,后續(xù)會演示將application.properties配置文件中的自定義配置屬性注入到Person實體類的對應(yīng)屬性中

(1)先在項目的com.lagou包下創(chuàng)建一個pojo包旗芬,并在該包下創(chuàng)建兩個實體類Pet和Person?

```java

public class Pet {


private String type;


private String name;


// 省略屬性getXX()和setXX()方法


// 省略toString()方法


}

```

```java

@Component? ? //用于將Person類作為Bean注入到Spring容器中

@ConfigurationProperties(prefix =

"person") //將配置文件中以person開頭的屬性注入到該類中

public class Person {

private int id;? ? ? ? ? ? //id

? ? ? private String name;? ? ? //名稱

? ? ? private List hobby;? ? ? //愛好

? ? ? private String[] family; //家庭成員

? ? ? private Map map;

? ? ? private Pet pet;? ? ? ? ? //寵物


// 省略屬性getXX()和setXX()方法


// 省略toString()方法

}

```

@ConfigurationProperties(prefix =

"person")注解的作用是將配置文件中以person開頭的屬性值通過setXX()方法注入到實體類對應(yīng)屬性中

@Component注解的作用是將當(dāng)前注入屬性值的Person類對象作為Bean組件放到Spring容器中舌胶,只有這樣才能被@ConfigurationProperties注解進(jìn)行賦值

(2)打開項目的resources目錄下的application.properties配置文件,在該配置文件中編寫需要對Person類設(shè)置的配置屬性

<img

src="./images/image-20191225151413976.png"

alt="image-20191225151413976" style="zoom:67%;" />

?? ? ? ?

編寫application.properties配置文件時岗屏,由于要配置的Person對象屬性是我們自定義的辆琅,Spring Boot無法自動識別漱办,所以不會有任何書寫提示这刷。在實際開發(fā)中,為了出現(xiàn)代碼提示的效果來方便配置娩井,在使用@ConfigurationProperties注解進(jìn)行配置文件屬性值注入時暇屋,可以在pom.xml文件中添加一個Spring Boot提供的配置處理器依賴:

```xml

<dependency>

? ? ? <groupId>org.springframework.boot</groupId>

? ? ? <artifactId>spring-boot-configuration-processor</artifactId>

? ? ? <optional>true</optional>

</dependency>

```

?? ? ? ?

在pom.xml中添加上述配置依賴后,還需要重新運行項目啟動類或者使用“Ctrl+F9”快捷鍵(即Build Project)重構(gòu)當(dāng)前Spring Boot項目方可生效?

(3)查看application.properties配置文件是否正確洞辣,同時查看屬性配置效果咐刨,打開通過IDEA工具創(chuàng)建的項目測試類,在該測試類中引入Person實體類Bean扬霜,并進(jìn)行輸出測試

```java

@RunWith(SpringRunner.class) // 測試啟動器定鸟,并加載Spring Boot測試注解

@SpringBootTest? // 標(biāo)記為Spring Boot單元測試類,并加載項目的ApplicationContext上下文環(huán)境

class SpringbootDemoApplicationTests {

// 配置測試

@Autowired

private Person person;

@Test

void

configurationTest() {


System.out.println(person);

}

}

```

打印結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AXAss9bW-1591587012851)(./images/image-20191225152040345.png)]

可以看出著瓶,測試方法configurationTest()運行成功联予,同時正確打印出了Person實體類對象。至此,說明application.properties配置文件屬性配置正確沸久,并通過相關(guān)注解自動完成了屬性注入?

#### 1.5.2

application.yaml配置文件?

YAML文件格式是Spring

Boot支持的一種JSON超集文件格式季眷,相較于傳統(tǒng)的Properties配置文件,YAML文件以數(shù)據(jù)為核心卷胯,是一種更為直觀且容易被電腦識別的數(shù)據(jù)序列化格式子刮。application.yaml配置文件的工作原理和application.properties是一樣的,只不過yaml格式配置文件看起來更簡潔一些窑睁。

* YAML文件的擴(kuò)展名可以使用.yml或者.yaml挺峡。

* application.yml文件使用 “key:(空格)value”格式配置屬性,使用縮進(jìn)控制層級關(guān)系担钮。

這里沙郭,針對不同數(shù)據(jù)類型的屬性值,介紹一下YAML

(1)value值為普通數(shù)據(jù)類型(例如數(shù)字裳朋、字符串病线、布爾等)?

?? ? ? ?

當(dāng)YAML配置文件中配置的屬性值為普通數(shù)據(jù)類型時,可以直接配置對應(yīng)的屬性值鲤嫡,同時對于字符串類型的屬性值送挑,不需要額外添加引號,示例代碼如下?

```yaml

server:

port: 8081

path: /hello

```

?? ? ?

上述代碼用于配置server的port和path屬性暖眼,port和path屬于一個級別?

(2)value值為數(shù)組和單列集合

當(dāng)YAML配置文件中配置的屬性值為數(shù)組或單列集合類型時惕耕,主要有兩種書寫方式:縮進(jìn)式寫法和行內(nèi)式寫法。

其中诫肠,縮進(jìn)式寫法還有兩種表示形式司澎,示例代碼如下

```yaml

person:

hobby:

? ? -

play

? ? -

read

? ? -

sleep

```

?? ?

或者使用如下示例形式

```yaml

person:

hobby:


play,


read,


sleep

```

上述代碼中,在YAML配置文件中通過兩種縮進(jìn)式寫法對person對象的單列集合(或數(shù)組)類型的愛好hobby賦值為play栋豫、read和sleep挤安。其中一種形式為“-(空格)屬性值”,另一種形式為多個屬性值之前加英文逗號分隔(注意丧鸯,最后一個屬性值后不要加逗號)蛤铜。

```yaml

person:

hobby: [play,read,sleep]

```

?? ? ? ?

通過上述示例對比發(fā)現(xiàn),YAML配置文件的行內(nèi)式寫法更加簡明丛肢、方便围肥。另外,包含屬性值的中括號“[]”還可以進(jìn)一步省略蜂怎,在進(jìn)行屬性賦值時穆刻,程序會自動匹配和校對?

(3)value值為Map集合和對象

當(dāng)YAML配置文件中配置的屬性值為Map集合或?qū)ο箢愋蜁r,YAML配置文件格式同樣可以分為兩種書寫方式:縮進(jìn)式寫法和行內(nèi)式寫法杠步。

其中氢伟,縮進(jìn)式寫法的示例代碼如下

```yaml

person:

map:


k1: v1


k2: v2

```

對應(yīng)的行內(nèi)式寫法示例代碼如下?

```yaml

person:

map: {k1: v1,k2: v2}

```

在YAML配置文件中撰洗,配置的屬性值為Map集合或?qū)ο箢愋蜁r,縮進(jìn)式寫法的形式按照YAML文件格式編寫即可腐芍,而行內(nèi)式寫法的屬性值要用大括號“{}”包含差导。

接下來,在Properties配置文件演示案例基礎(chǔ)上猪勇,通過配置application.yaml配置文件對Person對象進(jìn)行賦值设褐,具體使用如下?

(1)在項目的resources目錄下,新建一個application.yaml配置文件泣刹,在該配置文件中編寫為Person類設(shè)置的配置屬性

```yaml

#對實體類對象Person進(jìn)行屬性配置

person:

? id:

1

name: lucy

hobby: [吃飯助析,睡覺,打豆豆]

family: [father,mother]

map: {k1: v1,k2: v2}

pet: {type: dog,name: 旺財}

```

(2)再次執(zhí)行測試

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-f8IUbYnF-1591587012854)(./images/image-20191225154330740.png)]

可以看出椅您,測試方法configurationTest()同樣運行成功外冀,并正確打印出了Person實體類對象。

需要**說明**的是掀泳,本次使用application.yaml配置文件進(jìn)行測試時需要提前將application.properties配置文件中編寫的配置注釋雪隧,這是因為application.properties配置文件會覆蓋application.yaml配置文件.

***學(xué)習(xí)讓人快樂,學(xué)習(xí)更讓人覺得無知员舵!學(xué)了1個多月的《Java工程師高薪訓(xùn)練營》脑沿,才發(fā)現(xiàn)自己對每個技術(shù)點的認(rèn)知都很膚淺,根本深不下去马僻,立個Flag:每天堅持學(xué)習(xí)一小時庄拇,一周回答網(wǎng)上3個技術(shù)問題,把自己知道都分享出來韭邓。***

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末措近,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子女淑,更是在濱河造成了極大的恐慌瞭郑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗力,死亡現(xiàn)場離奇詭異凰浮,居然都是意外死亡我抠,警方通過查閱死者的電腦和手機苇本,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菜拓,“玉大人瓣窄,你說我怎么就攤上這事∧啥Γ” “怎么了俺夕?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵裳凸,是天一觀的道長。 經(jīng)常有香客問我劝贸,道長姨谷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任映九,我火速辦了婚禮梦湘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘件甥。我一直安慰自己捌议,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布引有。 她就那樣靜靜地躺著瓣颅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪譬正。 梳的紋絲不亂的頭發(fā)上宫补,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音曾我,去河邊找鬼守谓。 笑死,一個胖子當(dāng)著我的面吹牛您单,可吹牛的內(nèi)容都是我干的斋荞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虐秦,長吁一口氣:“原來是場噩夢啊……” “哼平酿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悦陋,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜈彼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俺驶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幸逆,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年暮现,在試婚紗的時候發(fā)現(xiàn)自己被綠了还绘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栖袋,死狀恐怖拍顷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塘幅,我是刑警寧澤昔案,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布尿贫,位于F島的核電站,受9級特大地震影響踏揣,放射性物質(zhì)發(fā)生泄漏庆亡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一捞稿、第九天 我趴在偏房一處隱蔽的房頂上張望身冀。 院中可真熱鬧,春花似錦括享、人聲如沸搂根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩愧。三九已至,卻和暖如春娇斩,著一層夾襖步出監(jiān)牢的瞬間仁卷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工犬第, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锦积,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓歉嗓,卻偏偏與公主長得像丰介,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鉴分,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容