前言
有的時候,配置信息是我們無法在開發過程中就能確定的。比如,給客戶開發的項目,客戶需要根據自身的情況自定義配置,如數據庫配置,加密密鑰配置等等。這時候,就需要把配置文件放在外面,讓用戶自定義配置部署了。
SpringBoot應對這種情況簡直就是游刃有余,其有多種加載配置文件的方式。下面我們就來認識一下
配置文件放在外部
SpringBoot支持把配置文件放在外部。只要把配置文件放在jar包的同級目錄下,或者放在同級下的config文件夾中,SpringBoot都會去此處讀取配置文件。現在有一個springboot打包程序,和一個配置文件(jar程序打包的時候,沒有設置端口號):

現在啟動程序,查看結果:

通過java -jar命令啟動,發現其已經讀取到了9876這個端口號的配置。
同樣的,我們可以放在config目錄下再測試看看結果:

依然是在9876端口啟動了。
以上兩個例子,說明了配置文件是可以放在外部的。
配置文件加載順序
這里總結下,springboot的配置文件可以打包時打jar包內部,也可以放在jar包外部。springboot的配置文件,還可以放在config目錄下(這里包括jar包外部同級的config目錄,也包括jar內部的config目錄)。
總的來說,配置文件的加載順序如下:
外部config目錄 > 外部同級目錄 > jar包內部config目錄 > jar包內部同級目錄
我們不妨在這四個地方都寫同一個配置不同的值來驗證一下這個順序。
在resources目錄下創建一個config文件夾,文件夾內的配置端口號為9999,文件夾外部的端口號為8888,如下:

啟動程序:

通過結果可以看到,讀取的是config目錄下的配置文件。
打包測試,兩個配置文件的配置如下圖所示:

啟動測試:

發現啟動的是config目錄下的配置:7777端口。
接下來,我們只需要再證明外部同級目錄 > jar包內部config目錄,那么上面的結論就成立了。我們把config目錄刪掉,然后測試:

這證明了上面的結論:外部config目錄 > 外部同級目錄 > jar包內部config目錄 > jar包內部同級目錄 是成立了
配置項默認值
通過上面的分析,我們知道了,外部config目錄的配置文件是優先級最高的。假如該配置文件沒有設置server.port默認值的時候,那么就會往下一級配置文件去尋值,如果所有配置文件都找不到,那么將會讀取默認的值。server.port這個默認值,是springboot內部給我們提供的,其默認就是8080。
那么我們要怎么給我們自定義的配置項設置默認值呢?其實很簡單,只需要使用一個":"即可

啟動程序,訪問該接口:

我們沒有在任何一處配置文件中配置name的值,所以讀取了默認值。
總結
本文講解了SpringBoot項目的多種放配置文件的方式,並且講解了各種配置文件的加載順序。在配置文件中都不存在值的時候,最后才會去讀取默認值。配置文件的加載順序,在實際開發中,還是經常會涉及到的。
