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

SpringBoot2.x基礎篇:配置文件的加載順序以及優先級覆蓋

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

SpringBoot約定了配置文件,默認為 application.properties,通過該文件可以修改很多默認的配置,當然我們還可以在該配置文件內添加自定義的配置,該文件通過 key=value的形式進行配置。1疑惑配置提示?...

SpringBoot約定了配置文件,默認為 application.properties,通過該文件可以修改很多默認的配置,當然我們還可以在該配置文件內添加自定義的配置,該文件通過 key=value的形式進行配置。

1

疑惑配置提示?

當我們使用開發工具來配置時,就會出現相應的提示,這要完全要歸功于 spring-configuration-metadata.json配置元數據文件,該文件內記錄了配置的名稱類型歸屬類等信息,如果配置類型為 枚舉還可以實現 選擇性配置。

SpringBoot提供了一個依賴,它的主要任務就是自動生成配置元數據,該依賴的名稱為 spring-boot-configuration-processor,在打包時會在 META-INF目錄生成一個名為 spring-configuration-metadata.json的文件。

2

配置方式

雖然默認使用 properties格式的配置文件,不過這種方式會導致配置的部分前綴冗余,可閱讀性稍差, SpringBoot內部還支持使用 yaml方式的配置文件,只需要在 src/main/resources目錄下創建一個名為 application.yml文件即可,使用配置時同樣也有提供功能。

項目內可以同時存在 application.properties、 application.yml兩個文件,經過測試發現, properties優先級會高一些,相同名稱的配置,會將 yml內的配置覆蓋掉。

3

指定配置文件

如果你的應用程序配置文件的名稱不是 application,你想要進行自定義,可以通過 --spring.config.name命令行參數進行指定,如下所示:

  1. java

  2. -

  3. jar project

  4. -

  5. sample

  6. .

  7. jar

  8. --

  9. spring

  10. .

  11. config

  12. .

  13. name

  14. =

  15. custome

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

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

SpringBoot已經給我們準備好了,通過 --spring.config.location參數就可以指定配置文件的位置,如下所示:

  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

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

  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

注意事項:支持通過命令行參數的方式指定多個配置文件,使用英文半角 , 隔開即可。

如果你通過 spring.config.location指定的不是一個文件而是一個目錄,在路徑最后務必添加一個"/"結束,然后結合 spring.config.name進行組合配置文件,組合示例如下:

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

  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

注意事項: spring.config.name該配置參數默認值為 application,所以如果只是指定了 spring.config.location并為目錄形式,上面示例中會自動將 spring.config.name追加到目錄路徑后,如果指定的 spring.config.location并非是一個目錄,這里會忽略 spring.config.name的值。

4

加載順序

SpringBoot應用程序在啟動時會遵循下面的順序進行加載配置文件:

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

  2. 2. 類路徑內config子目錄的配置文件

  3. 3. 當前項目根目錄下的配置文件

  4. 4. 當前項目根目錄下config子目錄的配置文件

示例項目配置文件存放結構如下所示:

  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

啟動時加載配置文件順序:1 > 2 > 3 > 4

src/main/resources下的配置文件在項目編譯時,會放在 target/classes下。

5

優先級覆蓋

SpringBoot配置文件存在一個特性,優先級較高的配置加載順序比較靠后, 相同名稱的配置 優先級較高的會 覆蓋掉 優先級較低的內容。

為了更好地解釋這一點,我們根據對應的加載順序分別創建一個 application.yml配置文件,來驗證根據優先級的不同是否存在覆蓋問題,如下圖所示:

在上面四個配置文件中都有一個名為 name的配置,而紅色字體標注的內容就是每個配置文件 name的配置內容,下面我們來啟動項目測試下輸出內容。

6

運行測試

在測試之前我們讓啟動類實現 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. }

項目啟動后通過 run方法進行打印 ${name}配置的內容。

測試一:順序覆蓋

保留上面四個對應加載順序的配置文件,啟動項目,控制臺輸出內容:

  1. 配置名稱:

  2. project

  3. /

  4. config

期望與實際輸出是符合的,項目根下的 config目錄是 最后加載的,所以它的 優先級相對其他三個來說是 最高的,覆蓋順序為:4 > 3 > 2 > 1

測試二:跨順序覆蓋

上一個測試點我們對每一個加載順序都對應添加了一個配置文件,那如果我們只有兩個 project/config、 classes/config兩個目錄的配置文件,是否按照優先級進行覆蓋呢?

刪除另外兩個,只保留 project/config、 classes/config兩個位置的配置文件,啟動項目控制臺輸出如下所示:

  1. 配置名稱:

  2. project

  3. /

  4. config

同樣是輸出了優先級最高的 project/config配置文件的內容,覆蓋順序為:4 > 1

測試三:單順序加載

平時在項目開發中一般都是將 application.yml配置文件放在 src/main/resources目錄下,然而根據上面的加載順序來看,我們可以將配置文件放置在任意一處,啟動時都會進行加載。

僅保留 classes/config位置的配置文件,啟動項目控制臺輸出內容如下所示:

  1. 配置名稱:

  2. classes

  3. /

  4. config

IDEA對 SpringBoot的支持真的很強大, classes/config下的配置文件同樣提供了 關鍵字提醒功能。

7

總結

了解配置文件的加載順序,才能得心應手的進行配置覆蓋,完全控制在不同環境下使用不同的配置內容,要記住 classes/application.yml優先級最低, project/config/application.yml優先級最高。

[我要糾錯]
文:王振袢&發表于江蘇
關鍵詞: SpringBoot 定了 配置文件 認為 application.properties

來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

您在閱讀:SpringBoot2.x基礎篇:配置文件的加載順序以及優先級覆蓋

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

蘇公網安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統計

主站蜘蛛池模板: 日韩一区二区在线观看 | 成年免费视频网站入口 | 三级黄色片日本 | 污视频网站免费 | 高清性色生活片免费视频软件 | 18jzjzz国产 | 亚洲色图天堂 | 国产caob| 中文字幕在线精品视频入口一区 | 极品美女a∨片在线看 | 成人午夜视频免费 | 在线看片亚洲 | 播放一级黄色片 | 图片区 日韩 欧美 亚洲 | 国产97视频| 国产成人人人爆出白浆 | 日韩精品午夜视频一区二区三区 | 亚洲精品高清在线观看 | 99久久www免费 | 精品国产成人 | 黄色欧美在线观看 | 在线精品日韩一区二区三区 | 亚洲人成网i8禁止 | 成人美女隐私免费 | 成人网18视频网站 | 国产ppp在线视频在线观看 | 色香婷婷 | 看黄色.com| 天堂中文网 | 人成网站在线观看 | 国产精品欧美在线观看 | 亚洲天堂成人在线 | 国产在线观看xxxx免费 | 国产日| 中文字字幕码一二三区 | 无遮挡一级毛片呦女视频 | 国产一区二区三区免费观看 | 久久视热这只是精品222 | 日本三级全黄三级三级三级口周 | 天堂在线视频 | 成人香蕉视频 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼