spring載入配置檔案是透過listener監視器實現的,在springboot啟動時:
在容器啟動完成後會廣播一個SpringApplicationEvent事件,而SpringApplicationEvent事件是繼承自ApplicationEvent時間的,程式碼如下:
由於ConfigFileApplicationListener監聽器實現了SmartApplicationListener介面,而SmartApplicationListener介面繼承了ApplicationListener<ApplicationEvent>介面,所以能監聽到上面廣播出來的SpringApplicationEvent事件,類的繼承圖如下:
SmartApplicationListener是繼承自ApplicationListener:
在ConfigFileApplicationListener中監聽事件的方法:
postProcessEnvironment方法是查詢application.yml配置檔案的入口方法:
在load方法裡面才是真正查詢配置檔案的過程:
預設先讀取的是location,然後是配置檔案的名字“application”,最後才是檔案型別“properties”或者“yml”;
localtion有多種,可以自行debug:有file:./和file:./config和classpath等目錄;
檔案型別預設的有四種:properties、xml、yml、yaml
最後查詢的具體路徑:location + name + "-" + profile + "." + ext
根據拼出來的路徑去查詢配置檔案,一般配置檔案都放在classpath目錄下面,當讀取到classpath目錄下的配置檔案的時候,程式去載入配置檔案:
當載入配置檔案時,程式先會讀取配置檔案的spring.profiles.active屬性,確定載入什麼環境的配置檔案(我是載入dev的):
然後在讀取到的配置檔案的屬性載入到profiles佇列中重新載入配置檔案,程式碼如下,所以任何專案都必須現有一個基礎的配置檔案,如application.yml,然後在這個配置檔案裡面有一個active屬性;
程式會先拿到這個屬性,放到profiles屬性中,重新去載入配置檔案如application-dev.yml,程式如下:
spring載入配置檔案是透過listener監視器實現的,在springboot啟動時:
在容器啟動完成後會廣播一個SpringApplicationEvent事件,而SpringApplicationEvent事件是繼承自ApplicationEvent時間的,程式碼如下:
由於ConfigFileApplicationListener監聽器實現了SmartApplicationListener介面,而SmartApplicationListener介面繼承了ApplicationListener<ApplicationEvent>介面,所以能監聽到上面廣播出來的SpringApplicationEvent事件,類的繼承圖如下:
SmartApplicationListener是繼承自ApplicationListener:
在ConfigFileApplicationListener中監聽事件的方法:
postProcessEnvironment方法是查詢application.yml配置檔案的入口方法:
在load方法裡面才是真正查詢配置檔案的過程:
預設先讀取的是location,然後是配置檔案的名字“application”,最後才是檔案型別“properties”或者“yml”;
localtion有多種,可以自行debug:有file:./和file:./config和classpath等目錄;
檔案型別預設的有四種:properties、xml、yml、yaml
最後查詢的具體路徑:location + name + "-" + profile + "." + ext
根據拼出來的路徑去查詢配置檔案,一般配置檔案都放在classpath目錄下面,當讀取到classpath目錄下的配置檔案的時候,程式去載入配置檔案:
當載入配置檔案時,程式先會讀取配置檔案的spring.profiles.active屬性,確定載入什麼環境的配置檔案(我是載入dev的):
然後在讀取到的配置檔案的屬性載入到profiles佇列中重新載入配置檔案,程式碼如下,所以任何專案都必須現有一個基礎的配置檔案,如application.yml,然後在這個配置檔案裡面有一個active屬性;
程式會先拿到這個屬性,放到profiles屬性中,重新去載入配置檔案如application-dev.yml,程式如下: