首頁 > Java > java教程 > springboot預設的載入路徑有哪幾種

springboot預設的載入路徑有哪幾種

王林
發布: 2023-05-15 22:16:04
轉載
1233 人瀏覽過

一、application.properties/.yml文件初識

前面說到沒有設定application.properties文件,現在我在main/resources資料夾下新建一個application.properties文件,並且寫上如下的配置

springboot預設的載入路徑有哪幾種

然後,啟動項目,

springboot預設的載入路徑有哪幾種

#好了,透過上面的啟動結果截圖,看到服務在連接埠”9090“啟動了。那麼如果在該目錄下在配置一個application.yml檔案吶,

springboot預設的載入路徑有哪幾種

#啟動結果如下,

springboot預設的載入路徑有哪幾種

##可以看到依然在連接埠」9090「啟動服務。為此得出結論:在相同資料夾下如果有application.properties和application.yml兩個文件,那麼application.properties文件會覆蓋application.yml文件,生效的是application.properties文件。

什麼是yml檔案

yml是由YAML (YAML Aint Markup Language)所寫的檔案格式,是一種很直觀的資料序列化方式。很簡單就是一種新的檔案格式,和XML、prperties檔案類似。

二、application.properties/.yml檔案可以在其他路徑嗎

看到這個標題的小夥伴肯定會說,難道application.properties可以在其他路徑,沒錯,猜對了。 application.properties/.yml我們是放在了main/resources資料夾下,在專案運行的時候該資料夾下的檔案會被拷貝到classes資料夾下,所以該路徑又叫做classpath。

在springboot的源碼中搜尋”application.properties“,搜到ConfigFileApplicationListener這樣一個類,在該類的註釋上有下面這段話,

* {@link EnvironmentPostProcessor} that configures the context environment by loading
 * properties from well known file locations. By default properties will be loaded from
 * 'application.properties' and/or 'application.yml' files in the following locations:
 * <ul>
 * <li>file:./config/</li>
 * <li>file:./config/{@literal *}/</li>
 * <li>file:./</li>
 * <li>classpath:config/</li>
 * <li>classpath:</li>
 * </ul>
登入後複製

大體意思是”EnvironmentPostProcessor通過從眾所周知的文件路徑加載properties來配置上下文環境。預設的properties來自application.properties/application.yml文件,這些文件來自以下路徑“,

file:./config/ 根資料夾(專案文件夾)下的config目錄

file:./config/{@literal *}/ 根資料夾(專案資料夾)下的config/*/目錄

file:./根資料夾(專案資料夾)下方

classpath:config/ classpath下的config/

classpath: classpath下

#好了,我們已經知道application. properties/application.yml檔案會從以上的幾個位置加載,而我們設定的main/resources其實就是上面的classpath:,那麼上面的這些路徑是不是也有先後順序吶,順著ConfigFileApplicationListener這個類別繼續往下看,看到了下面的這樣一個屬性,

// Note the order is from least to most specific (last one wins)
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";
登入後複製

可以看到這個DEFAULT_SEARCH_LOCATIONS 指定的就是上面的幾個值,且上面的註釋很有意思,但是我沒翻譯好,通過例子來驗證吧。已經知道application.properties和application.yml的優先權,我們就用application.properties檔案來驗證就好了,在resources/config(運行路徑:classpath:/config/)下有application.properties,

springboot預設的載入路徑有哪幾種

看下現在使用的是哪個端口,

springboot預設的載入路徑有哪幾種

使用的是9092,也說resouces/config的優先權大於resources,即,classpath:/config/>classpath:/。下面再看下file:/

springboot預設的載入路徑有哪幾種

在專案的根路徑下新建了application.properties文件,起server.port為9093,下面看服務使用的哪個端口,

springboot預設的載入路徑有哪幾種

服務使用的是9093,優先權為:file:/>classpath:/config/>classpath:/。現在我在專案的路徑下增加config/my/路徑,增加application.properties文件,

springboot預設的載入路徑有哪幾種

#測試結果如下,

springboot預設的載入路徑有哪幾種

服務在連接埠」9094「啟動,說明優先權為:file:./config/*/>file:./>classpath:/>classpath:/config/,最後驗證的點為file :/config,這個我想無須驗證了肯定優先權是最高的,為此優先權順序由高到低為:file:./config/ > file:./config/*/ > file:./ > classpath:/ > classpath:/config/,通俗點說就是:專案根路徑下的config>專案根路徑下的config/*/>專案根路徑>classpath:/config>classpath:/

以上是springboot預設的載入路徑有哪幾種的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板