SpringBoot中的自定義FailureAnalyzer詳解
介紹
FailureAnalyzer是一種很好的方式在啟動時攔截異常并將其轉(zhuǎn)換為易讀的消息,并將其包含在FailureAnalysis中。 Spring Boot為應用程序上下文相關(guān)異常、JSR-303驗證等提供了此類分析器。 實際上也是非常容易創(chuàng)建自己的FailureAnalyzer。
AbstractFailureAnalyzer是FailureAnalyzer的一個抽象實現(xiàn),它檢查要處理的異常中是否存在指定的異常類型。 我們可以從中進行擴展,以便存在指定的異常時有機會去處理。 如果由于某種原因無法處理異常,則返回null以使另一個實現(xiàn)有機會處理異常。
代碼示例
檢查java.lang.NullPointerException異常
繼承AbstractFailureAnalyzer,重寫analyze方法,返回FailureAnalysis。泛型的類型是Throwable的子類。
package com.example.demo.failureAnalyzer; import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; import org.springframework.boot.diagnostics.FailureAnalysis; public class NullPointFailureAnalyzer extends AbstractFailureAnalyzer<NullPointerException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, NullPointerException cause) { return new FailureAnalysis(cause.getMessage(), "請檢查空指針", cause); } }
spring.factories注冊
#src/main/resources/META-INF中添加spring.factories,并注冊自定義的FailureAnalyzer: org.springframework.boot.diagnostics.FailureAnalyzer=\ com.momo.springbootfailureanalyzer.ArithmeticFailureAnalyzer
測試
定義一個NullPointException,如null.equal(ss)。SpringBoot在啟動時會創(chuàng)建這個bean,在執(zhí)行方法時由于null.equal(ss)的原因會拋出java.lang.NullPointerException運行時異常,此時通過自定義的FailureAnalyzer進行捕獲并處理該異常。
@Service public class ValidateNullPointExceptionService { public ValidateNullPointExceptionService() { Integer a = null; System.out.println(a.equals("88")); } }
啟動時控制臺打印的信息
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-02-26 16:48:24.228 ERROR 28488 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
null
Action:
請檢查空指針
Process finished with exit code 1
到此這篇關(guān)于SpringBoot中的自定義FailureAnalyzer詳解的文章就介紹到這了,更多相關(guān)自定義FailureAnalyzer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java編程一維數(shù)組轉(zhuǎn)換成二維數(shù)組實例代碼
這篇文章主要介紹了Java編程一維數(shù)組轉(zhuǎn)換成二維數(shù)組,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01詳解Spring Data JPA系列之投影(Projection)的用法
本篇文章主要介紹了詳解Spring Data JPA系列之投影(Projection)的用法,具有一定的參考價值,有興趣的可以了解一下2017-07-07Java關(guān)鍵字final、static使用總結(jié)
final方法不能被子類的方法覆蓋,但可以被繼承。用static修飾的代碼塊表示靜態(tài)代碼塊,當Java虛擬機(JVM)加載類時,就會執(zhí)行該代碼塊,下面通過本文給大家分享Java關(guān)鍵字final、static使用總結(jié),感興趣的朋友一起看看吧2017-07-07Java使用ES?Client?調(diào)用滾動查詢及Elasticsearch滾動查詢Scrolling機制
Elasticsearch提供了一種稱為"滾動查詢"(Scrolling)的機制,用于處理大型數(shù)據(jù)集的分頁查詢,這篇文章給大家介紹滾動查詢的一般步驟及Java使用ESClient調(diào)用滾動查詢的方法,感興趣的朋友一起看看吧2023-08-08Java中使用websocket實現(xiàn)在線聊天功能
這篇文章主要介紹了Java中使用websocket實現(xiàn)在線聊天功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02