免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

SpringBoot2.x基礎(chǔ)篇:配置文件的加載順序以及優(yōu)先級(jí)覆蓋

:2020年03月24日 程序員恒宇少年
分享到:

SpringBoot約定了配置文件,默認(rèn)為 application.properties,通過(guò)該文件可以修改很多默認(rèn)的配置,當(dāng)然我們還可以在該配置文件內(nèi)添加自定義的配置,該文件通過(guò) key=value的形式進(jìn)行配置。1疑惑配置提示?...

SpringBoot約定了配置文件,默認(rèn)為 application.properties,通過(guò)該文件可以修改很多默認(rèn)的配置,當(dāng)然我們還可以在該配置文件內(nèi)添加自定義的配置,該文件通過(guò) key=value的形式進(jìn)行配置。

1

疑惑配置提示?

當(dāng)我們使用開(kāi)發(fā)工具來(lái)配置時(shí),就會(huì)出現(xiàn)相應(yīng)的提示,這要完全要?dú)w功于 spring-configuration-metadata.json配置元數(shù)據(jù)文件,該文件內(nèi)記錄了配置的名稱類型歸屬類等信息,如果配置類型為 枚舉還可以實(shí)現(xiàn) 選擇性配置。

SpringBoot提供了一個(gè)依賴,它的主要任務(wù)就是自動(dòng)生成配置元數(shù)據(jù),該依賴的名稱為 spring-boot-configuration-processor,在打包時(shí)會(huì)在 META-INF目錄生成一個(gè)名為 spring-configuration-metadata.json的文件。

2

配置方式

雖然默認(rèn)使用 properties格式的配置文件,不過(guò)這種方式會(huì)導(dǎo)致配置的部分前綴冗余,可閱讀性稍差, SpringBoot內(nèi)部還支持使用 yaml方式的配置文件,只需要在 src/main/resources目錄下創(chuàng)建一個(gè)名為 application.yml文件即可,使用配置時(shí)同樣也有提供功能。

項(xiàng)目?jī)?nèi)可以同時(shí)存在 application.properties、 application.yml兩個(gè)文件,經(jīng)過(guò)測(cè)試發(fā)現(xiàn), properties優(yōu)先級(jí)會(huì)高一些,相同名稱的配置,會(huì)將 yml內(nèi)的配置覆蓋掉。

3

指定配置文件

如果你的應(yīng)用程序配置文件的名稱不是 application,你想要進(jìn)行自定義,可以通過(guò) --spring.config.name命令行參數(shù)進(jìn)行指定,如下所示:

  1. java

  2. -

  3. jar project

  4. -

  5. sample

  6. .

  7. jar

  8. --

  9. spring

  10. .

  11. config

  12. .

  13. name

  14. =

  15. custome

注意事項(xiàng):我們只需要指定配置文件的名稱即可,可以使用 properties或 yaml文件格式,上面的配置會(huì)加載 src/main/resources/custome.yml或 src/main/resources/custome.properties。

通過(guò) --spring.config.name僅僅是修改了配置文件的名稱,那如果是修改配置文件所處的目錄位置,我們需要怎么做呢?

SpringBoot已經(jīng)給我們準(zhǔn)備好了,通過(guò) --spring.config.location參數(shù)就可以指定配置文件的位置,如下所示:

  1. java

  2. -

  3. jar project

  4. -

  5. sample

  6. .

  7. jar

  8. --

  9. spring

  10. .

  11. config

  12. .

  13. location

  14. =

  15. classpath

  16. :/

  17. configs

  18. /

  19. custome

  20. .

  21. yml

如果一個(gè)配置文件無(wú)法滿足你的需求,那你看看下面這個(gè)方式:

  1. java

  2. -

  3. jar project

  4. -

  5. sample

  6. .

  7. jar

  8. --

  9. spring

  10. .

  11. config

  12. .

  13. location

  14. =

  15. classpath

  16. :/

  17. configs

  18. /

  19. custome

  20. .

  21. yml

  22. ,

  23. classpath

  24. :/

  25. configs

  26. /

  27. default

  28. .

  29. properties

注意事項(xiàng):支持通過(guò)命令行參數(shù)的方式指定多個(gè)配置文件,使用英文半角 , 隔開(kāi)即可。

如果你通過(guò) spring.config.location指定的不是一個(gè)文件而是一個(gè)目錄,在路徑最后務(wù)必添加一個(gè)"/"結(jié)束,然后結(jié)合 spring.config.name進(jìn)行組合配置文件,組合示例如下:

  1. # 加載/configs/application.properties 或 /configs/application.yml(默認(rèn)文件名)

  2. java

  3. -

  4. jar project

  5. -

  6. sample

  7. .

  8. jar

  9. --

  10. spring

  11. .

  12. config

  13. .

  14. location

  15. =

  16. classpath

  17. :/

  18. configs

  19. /

  20. # 加載/configs/custome.properties 或 /configs/custome.yml

  21. java

  22. -

  23. jar project

  24. -

  25. sample

  26. .

  27. jar

  28. --

  29. spring

  30. .

  31. config

  32. .

  33. location

  34. =

  35. classpath

  36. :/

  37. configs

  38. /

  39. --

  40. spring

  41. .

  42. config

  43. .

  44. name

  45. =

  46. custome

注意事項(xiàng): spring.config.name該配置參數(shù)默認(rèn)值為 application,所以如果只是指定了 spring.config.location并為目錄形式,上面示例中會(huì)自動(dòng)將 spring.config.name追加到目錄路徑后,如果指定的 spring.config.location并非是一個(gè)目錄,這里會(huì)忽略 spring.config.name的值。

4

加載順序

SpringBoot應(yīng)用程序在啟動(dòng)時(shí)會(huì)遵循下面的順序進(jìn)行加載配置文件:

  1. 1. 類路徑下的配置文件

  2. 2. 類路徑內(nèi)config子目錄的配置文件

  3. 3. 當(dāng)前項(xiàng)目根目錄下的配置文件

  4. 4. 當(dāng)前項(xiàng)目根目錄下config子目錄的配置文件

示例項(xiàng)目配置文件存放結(jié)構(gòu)如下所示:

  1. .

  2. project

  3. -

  4. sample

  5. ├──

  6. config

  7. ├──

  8. application

  9. .

  10. yml

  11. 4

  12. └──

  13. src

  14. /

  15. main

  16. /

  17. resources

  18. |

  19. ├──

  20. application

  21. .

  22. yml

  23. 1

  24. |

  25. └──

  26. config

  27. |

  28. |

  29. ├──

  30. application

  31. .

  32. yml

  33. 2

  34. ├──

  35. application

  36. .

  37. yml

  38. 3

啟動(dòng)時(shí)加載配置文件順序:1 > 2 > 3 > 4

src/main/resources下的配置文件在項(xiàng)目編譯時(shí),會(huì)放在 target/classes下。

5

優(yōu)先級(jí)覆蓋

SpringBoot配置文件存在一個(gè)特性,優(yōu)先級(jí)較高的配置加載順序比較靠后, 相同名稱的配置 優(yōu)先級(jí)較高的會(huì) 覆蓋掉 優(yōu)先級(jí)較低的內(nèi)容。

為了更好地解釋這一點(diǎn),我們根據(jù)對(duì)應(yīng)的加載順序分別創(chuàng)建一個(gè) application.yml配置文件,來(lái)驗(yàn)證根據(jù)優(yōu)先級(jí)的不同是否存在覆蓋問(wèn)題,如下圖所示:

在上面四個(gè)配置文件中都有一個(gè)名為 name的配置,而紅色字體標(biāo)注的內(nèi)容就是每個(gè)配置文件 name的配置內(nèi)容,下面我們來(lái)啟動(dòng)項(xiàng)目測(cè)試下輸出內(nèi)容。

6

運(yùn)行測(cè)試

在測(cè)試之前我們讓啟動(dòng)類實(shí)現(xiàn) CommandLineRunner接口,如下所示:

  1. @SpringBootApplication

  2. public

  3. class

  4. LoadOrderOfConfigFilesApplication

  5. implements

  6. CommandLineRunner

  7. {

  8. public

  9. static

  10. void

  11. main

  12. (

  13. String

  14. []

  15. args

  16. )

  17. {

  18. SpringApplication

  19. .

  20. run

  21. (

  22. LoadOrderOfConfigFilesApplication

  23. .

  24. class

  25. ,

  26. args

  27. );

  28. }

  29. @Value

  30. (

  31. "${name}"

  32. )

  33. private

  34. String

  35. name

  36. ;

  37. @Override

  38. public

  39. void

  40. run

  41. (

  42. String

  43. ...

  44. args

  45. )

  46. throws

  47. Exception

  48. {

  49. System

  50. .

  51. out

  52. .

  53. println

  54. (

  55. "配置名稱:"

  56. +

  57. name

  58. );

  59. }

  60. }

項(xiàng)目啟動(dòng)后通過(guò) run方法進(jìn)行打印 ${name}配置的內(nèi)容。

測(cè)試一:順序覆蓋

保留上面四個(gè)對(duì)應(yīng)加載順序的配置文件,啟動(dòng)項(xiàng)目,控制臺(tái)輸出內(nèi)容:

  1. 配置名稱:

  2. project

  3. /

  4. config

期望與實(shí)際輸出是符合的,項(xiàng)目根下的 config目錄是 最后加載的,所以它的 優(yōu)先級(jí)相對(duì)其他三個(gè)來(lái)說(shuō)是 最高的,覆蓋順序?yàn)椋? > 3 > 2 > 1

測(cè)試二:跨順序覆蓋

上一個(gè)測(cè)試點(diǎn)我們對(duì)每一個(gè)加載順序都對(duì)應(yīng)添加了一個(gè)配置文件,那如果我們只有兩個(gè) project/config、 classes/config兩個(gè)目錄的配置文件,是否按照優(yōu)先級(jí)進(jìn)行覆蓋呢?

刪除另外兩個(gè),只保留 project/config、 classes/config兩個(gè)位置的配置文件,啟動(dòng)項(xiàng)目控制臺(tái)輸出如下所示:

  1. 配置名稱:

  2. project

  3. /

  4. config

同樣是輸出了優(yōu)先級(jí)最高的 project/config配置文件的內(nèi)容,覆蓋順序?yàn)椋? > 1

測(cè)試三:?jiǎn)雾樞蚣虞d

平時(shí)在項(xiàng)目開(kāi)發(fā)中一般都是將 application.yml配置文件放在 src/main/resources目錄下,然而根據(jù)上面的加載順序來(lái)看,我們可以將配置文件放置在任意一處,啟動(dòng)時(shí)都會(huì)進(jìn)行加載。

僅保留 classes/config位置的配置文件,啟動(dòng)項(xiàng)目控制臺(tái)輸出內(nèi)容如下所示:

  1. 配置名稱:

  2. classes

  3. /

  4. config

IDEA對(duì) SpringBoot的支持真的很強(qiáng)大, classes/config下的配置文件同樣提供了 關(guān)鍵字提醒功能。

7

總結(jié)

了解配置文件的加載順序,才能得心應(yīng)手的進(jìn)行配置覆蓋,完全控制在不同環(huán)境下使用不同的配置內(nèi)容,要記住 classes/application.yml優(yōu)先級(jí)最低, project/config/application.yml優(yōu)先級(jí)最高。

[我要糾錯(cuò)]
文:王振袢&發(fā)表于江蘇
關(guān)鍵詞: SpringBoot 定了 配置文件 認(rèn)為 application.properties

來(lái)源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺(tái),并已注明來(lái)源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)聯(lián)系小編,我們會(huì)及時(shí)審核處理。
聲明:江蘇教育黃頁(yè)對(duì)文中觀點(diǎn)保持中立,對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對(duì)文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點(diǎn)個(gè)贊
0
踩一腳
0

您在閱讀:SpringBoot2.x基礎(chǔ)篇:配置文件的加載順序以及優(yōu)先級(jí)覆蓋

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺(tái)保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號(hào)-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計(jì)

主站蜘蛛池模板: 妞干网免费在线观看 | 91抖音短视频 | 日本α级片 | 自拍 亚洲 欧美 另类 动漫 | 国产精品麻豆综合在线 | 国产一国产一级毛片视频在线 | 114级毛片免费观看 1204国产成人精品视频 | 韩日一区二区三区 | 免费二级c片在线观看a | 亚洲精品v欧美精品动漫精品 | 午夜影院伦理片 | 综合网插 | 午夜寂寞影院视频在线观看 | 日干夜干天天干 | 我要看一级大片 | 一级视频网站 | 日日摸夜夜添夜夜添影院视频 | 国产精品成人一区二区 | 免费的三级毛片 | yy3341殇情影院理论片 | 国产精品嫩草视频永久网址 | 最近最好的中文字幕2019免费 | 亚洲图片欧美日韩 | 亚洲国产日韩欧美 | 日韩欧美国产视频 | 免看一级一片一在线看 | 成人高辣h视频一区二区在线观看 | 亚欧成人乱码一区二区 | 国产在线一区二区 | 国产人人艹| 男女情趣视频免费播放 | 欧美18一19xxx | 黄色顶级视频 | 日本天堂网在线观看 | 奇米影视亚洲狠狠色777不卡 | 国产精品va在线观看手机版 | 91人前露出精品国产 | 日本在线亚州精品视频在线 | 青草青草久热精品视频在线网站 | 精品日韩一区 | 成人日韩 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價(jià)格低
  • 蘋果原裝手機(jī)殼