FailureAnalyzer is a great way to intercept an exception on startup and turn it into a human-readable message, wrapped in a FailureAnalysis. Spring Boot provides such an analyzer for application-context-related exceptions, JSR-303 validations, and more. You can also create your own.
FailureAnalyzer 是在application 啟動之初去攔截例外並將例外轉換成人類可閱讀的訊息,
被 FailureAnalysis 所包裹。Boot 提供針對 application-context 例外、JSR-303 檢驗之類的分析器,使用者也可以自行創建屬於自己的分析器。
注意這裡特別強調,攔截的例外是在應用啟動之初,如果是應用運行過程就應該透過 ExceptionHandler 去處理。
下方為 Class FailureAnalysis 文件說明,
隸屬於 org.springframework.boot.diagnostics 包之下(diagnostics: 診斷)
下方為 Functional Interface FailureAnalyzer ,同樣也屬於 boot.diagnostics 包之下
在唯一的方法之中,去捕捉 Throwable 類別,其囊括所有的 Checked 、Unchecked Exception 。
這裡提一下 JSR-303( 其中 Java Specification Request), 網路上最常看到的解釋為
其為 Java EE 6 中的一项子规范,根據 IBM 關於 JavaEE 6 的support 清單來看,JSR-303 這一規範是 JavaEE6 開始support ,規範的實作由 Hibernate Validator。
AbstractFailureAnalyzer is a convenient extension of FailureAnalyzer that checks the presence of a specified exception type in the exception to handle. You can extend from that so that your implementation gets a chance to handle the exception only when it is actually present. If, for whatever reason, you cannot handle the exception, return null to give another implementation a chance to handle the exception.
AbstractFailureAnalyzer 是 FailureAnalyzer 的一個便捷擴展,用於檢查異常中是否存在指定的異常類型以進行處理。可以從 AbstractFailureAnalyzer 擴展,這樣就可以在遇到這個例外發生之時,有機會去處理它。當遇到你無法處理的例外時候,就回傳 null 去給其他實作來處理這個例外。
這裡 AbstractFailureAnalyzer 從名稱就知道他是一個抽象類別,這個抽象類別給了我們一個很好的起手式,比起一無所知就你去實現一個 Functional Interface FailureAnalyzer 還來得好。
下方可以看到 AbstractFailureAnalyzer 除了原本實作 FailureAnalyzer,另外可以看到有額外三個方法的擴充。
參考資料
{官方} FailureAnalysis
https://docs.spring.io/spring-boot/docs/3.1.4/api/org/springframework/boot/diagnostics/FailureAnalysis.html
{官方} FailureAnalyzer
https://docs.spring.io/spring-boot/docs/3.1.4/api/org/springframework/boot/diagnostics/FailureAnalyzer.html
{IBM} JavaEE 6 支援規範
https://www.ibm.com/docs/zh-tw/was-liberty/zos?topic=architecture-java-ee-6-programming-model-support
一文學會JSR-303 檢驗
https://cloud.tencent.com/developer/article/1698678