1. 程式人生 > 程式設計 >詳解springboot啟動時是如何載入配置檔案application.yml檔案

詳解springboot啟動時是如何載入配置檔案application.yml檔案

今天啟動springboot時,明明在resources目錄下面配置了application.yml的檔案,但是卻讀不出來,無奈看了下原始碼,總結一下springboot查詢配置檔案路徑的過程,能力有限,歡迎各位大牛指導!!!

spring載入配置檔案是通過listener監視器實現的,在springboot啟動時:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

在容器啟動完成後會廣播一個SpringApplicationEvent事件,而SpringApplicationEvent事件是繼承自ApplicationEvent時間的,程式碼如下:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

詳解springboot啟動時是如何載入配置檔案application.yml檔案

由於ConfigFileApplicationListener監聽器實現了SmartApplicationListener介面,而SmartApplicationListener介面繼承了ApplicationListener<ApplicationEvent>介面,所以能監聽到上面廣播出來的SpringApplicationEvent事件,類的繼承圖如下:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

SmartApplicationListener是繼承自ApplicationListener:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

在ConfigFileApplicationListener中監聽事件的方法:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

postProcessEnvironment方法是查詢application.yml配置檔案的入口方法:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

在load方法裡面才是真正查詢配置檔案的過程:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

預設先讀取的是location,然後是配置檔案的名字“application”,最後才是檔案型別“properties”或者“yml”;

localtion有多種,可以自行debug:有file:./和file:./config和classpath等目錄;

檔案型別預設的有四種:properties、xml、yml、yaml

最後查詢的具體路徑:location + name + "-" + profile + "." + ext

詳解springboot啟動時是如何載入配置檔案application.yml檔案

根據拼出來的路徑去查詢配置檔案,一般配置檔案都放在classpath目錄下面,當讀取到classpath目錄下的配置檔案的時候,程式去載入配置檔案:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

詳解springboot啟動時是如何載入配置檔案application.yml檔案

當載入配置檔案時,程式先會讀取配置檔案的spring.profiles.active屬性,確定載入什麼環境的配置檔案(我是載入dev的):

詳解springboot啟動時是如何載入配置檔案application.yml檔案

然後在讀取到的配置檔案的屬性載入到profiles佇列中重新載入配置檔案,程式碼如下,所以任何專案都必須現有一個基礎的配置檔案,如application.yml,然後在這個配置檔案裡面有一個active屬性;

詳解springboot啟動時是如何載入配置檔案application.yml檔案

程式會先拿到這個屬性,放到profiles屬性中,重新去載入配置檔案如application-dev.yml,程式如下:

詳解springboot啟動時是如何載入配置檔案application.yml檔案

詳解springboot啟動時是如何載入配置檔案application.yml檔案

注:這篇文章是為了解決配置檔案找不到而寫的,是為了解決問題而寫的,主要是解析查詢配置檔案路徑的過程,具體的解析配置檔案的過程,讀者可以細看原始碼,最後我也找到了配置檔案為什麼找不到的原因,主要是因為idea編譯時,classpath路徑下面沒有application.yml檔案,複製配置檔案到classpath目錄下,問題就解決了!

到此這篇關於詳解springboot啟動時是如何載入配置檔案application.yml檔案的文章就介紹到這了,更多相關springboot啟動載入application.yml內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!