springboot原始碼 診斷分析器模組

2021-09-26 06:57:45 字數 2246 閱讀 4946

總結springboot在啟動過程中,會對啟動失敗的原因及異常進行診斷,並列印報告

初始化階段:載入springboot內建配置的分析器

準備階段:設定bean工廠/環境配置

分析階段:遍歷呼叫分析器,只要有分析結果返回

診斷分析模組主要分為:分析器、報告呈現

分析入口類

入口類:failureanalyzers

構造器

this(context, null);

} assert.notnull(context, "context must not be null");

this.classloader = (classloader == null ? context.getclassloader() : classloader);

// 初始化分析器

this.analyzers = loadfailureanalyzers(this.classloader);

preparefailureanalyzers(this.analyzers, context);

}// 從spring.factory檔案中讀取分析器

private listloadfailureanalyzers(classloader classloader)

catch (throwable ex)

} annotationawareordercomparator.sort(analyzers);

return analyzers;}

分析報告核心方法

public boolean analyzeandreport(throwable failure) 

private failureanalysis analyze(throwable failure, listanalyzers)

} catch (throwable ex)

} return null;

}private boolean report(failureanalysis analysis, classloader classloader)

// 遍歷呼叫報告介面,生成報告

for (failureanalysisreporter reporter : reporters)

return true;

}

分析器

分析介面:failureanalyzer

抽象類:abstractfailureanalyzer->analyze(throwable failure)

public failureanalysis analyze(throwable failure) 

return null;

}protected final e findcause(throwable failure, classtype)

failure = failure.getcause();

} return null;

}

具體實現類:portinusefailureanalyzer(其中的乙個實現類)

class portinusefailureanalyzer extends abstractfailureanalyzer

}

報告器

報告介面:failureanalysisreporter

核心方法:void report(failureanalysis analysis); // 對分析結果進行報告呈現

具體實現類:loggingfailureanalysisreporter,主要進行日誌列印

public final class loggingfailureanalysisreporter implements failureanalysisreporter 

// error模式下列印自定義錯誤資訊

if (logger.iserrorenabled())

} private string buildmessage(failureanalysis failureanalysis)

return builder.tostring();

}}

雖然該模組比較簡單,但很有指導意義,將異常處理專門封裝成乙個模組,易於擴充套件,易於理解

使用了模版方法模式,抽象類abstractfailureanalyzer定義了基本流程,子類去實現,擴充套件性較好

功能模組劃分清晰:將整個流程分為分析和報告兩個大的階段,耦合度低

springboot原始碼略讀

springboot的精髓是自動依賴注入。那麼哪些能自動注入呢,開啟spring boot autoconfigure,jar下的spring.factories。可以看到一堆這樣的配置 auto configure org.springframework.boot.autoconfigure.en...

SpringBoot原始碼分析

public class 第乙個引數 resourceloader 資源載入器 第二個引數 primarysources 載入的主要資源類 suppresswarnings public resourceloader resourceloader,class primarysources deduc...

Spring Boot 原始碼分析

1 專案初始化過程 springboot啟動類 springboot的啟動很簡單,如下 public static void main string args this.resourceloader resourceloader initialize sources private void ini...