SpringBoot之異常報告器原始碼分析

一 什麼是異常報告器

收集錯誤資訊,用於向用戶報告錯誤原因

二 異常報告器的作用

1 程式執行失敗的時候會在控制檯或者日誌上打印出一個具體的錯誤報告,以方便排查問題。

三 異常報告器原始碼分析

1 在SpringApplication建構函式中呼叫setInitializers,載入spring。factories檔案,把FailAnalyzed子類全限定名封裝進List集合中。

SpringBoot之異常報告器原始碼分析

2 在run函式中,建立FailureAnalyzed例項,在建構函式中,在快取中獲取FailureAnalyzed子類全限定名存於List集合中,接著迴圈集合使用反射建立FailureAnalyzed子類例項並存於List集合中。

SpringBoot之異常報告器原始碼分析

3 當run函式中有異常丟擲則執行handleRunFailure函式,迴圈執行listeners。finished(context, exception);傳送事件(ApplicationFailed事件),在廣播器例項函式multicastEvent迴圈取出監聽器例項並檢驗事件(ApplicationFailed)是否屬於監聽器,成立則呼叫函式處理。

SpringBoot之異常報告器原始碼分析

取出監聽器完成

SpringBoot之異常報告器原始碼分析

廣播器廣播事件(ApplicationFailed)

SpringBoot之異常報告器原始碼分析

監聽器處理事件(ApplicationFailed)

4 執行reportFailure 函式,迴圈取出FailureAnalyzed子類例項,判斷異常是否屬於某個Class例項屬於則返回FailureAnalyzed子類例項, 再透過FailureAnalyzedReport例項輸出FailureAnalyzed異常資訊。

SpringBoot之異常報告器原始碼分析

獲取異常對應的FailureAnalyzed

SpringBoot之異常報告器原始碼分析

查詢異常對應的FailureAnalysis例項

SpringBoot之異常報告器原始碼分析

異常報告器輸出異常資訊

SpringBoot之異常報告器原始碼分析

異常資訊格式化構建輸出