有的時候,配置信息是咱們沒法在開發過程當中就能肯定的。好比,給客戶開發的項目,客戶須要根據自身的狀況自定義配置,如數據庫配置,加密密鑰配置等等。這時候,就須要把配置文件放在外面,讓用戶自定義配置部署了。java
SpringBoot應對這種狀況簡直就是遊刃有餘,其有多種加載配置文件的方式。下面咱們就來認識一下spring
SpringBoot支持把配置文件放在外部。只要把配置文件放在jar包的同級目錄下,或者放在同級下的config文件夾中,SpringBoot都會去此處讀取配置文件。如今有一個springboot打包程序,和一個配置文件(jar程序打包的時候,沒有設置端口號):數據庫
如今啓動程序,查看結果:springboot
經過java -jar命令啓動,發現其已經讀取到了9876這個端口號的配置。測試
一樣的,咱們能夠放在config目錄下再測試看看結果:加密
依然是在9876端口啓動了。3d
以上兩個例子,說明了配置文件是能夠放在外部的。cdn
這裏總結下,springboot的配置文件能夠打包時打jar包內部,也能夠放在jar包外部。springboot的配置文件,還能夠放在config目錄下(這裏包括jar包外部同級的config目錄,也包括jar內部的config目錄)。server
總的來講,配置文件的加載順序以下:blog
外部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項目的多種放配置文件的方式,而且講解了各類配置文件的加載順序。在配置文件中都不存在值的時候,最後纔會去讀取默認值。配置文件的加載順序,在實際開發中,仍是常常會涉及到的。