回覆列表
  • 1 # 門窗玻璃圈

    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,程式如下:

  • 中秋節和大豐收的關聯?
  • 石斑魚吃食最佳什麼時候?