SpringBoot中FailureAnalyzer的使用詳解
FailureAnalyzer的使用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> </dependency>
功能定位:攔截啟動(dòng)時(shí)異常,將異常轉(zhuǎn)換成更加易讀的信息并包裝成org.springframework.boot.diagnostics.FailureAnalysis對(duì)象,監(jiān)控應(yīng)用啟動(dòng)過程。
FailureAnalysis是一個(gè)POJO:
@Getter @AllArgsConstructor public class FailureAnalysis { private final String description; private final String action; private final Throwable cause; }
FailureAnalyzer接口:
public interface FailureAnalyzer { FailureAnalysis analyze(Throwable var1); }
AbstractFailureAnalyzer 抽象類實(shí)現(xiàn) FailureAnalyzer 接口,SpringBoot 已經(jīng)提供一系列 AbstractFailureAnalyzer 繼承類,在 org.springframework.boot.diagnostics.analyzer和org.springframework.boot.autoconfigure.diagnostics.analyzer包下面
- BeanCurrentlyInCreationFailureAnalyzer
- PortInUseFailureAnalyzer
- NoSuchMethodFailureAnalyzer
- BindFailureAnalyzer
- AbstractInjectionFailureAnalyzer
- NoSuchBeanDefinitionFailureAnalyzer
- DataSourceBeanCreationFailureAnalyzer
- HikariDriverConfigurationFailureAnalyzer
- NoUniqueBeanDefinitionFailureAnalyzer
- ValidationExceptionFailureAnalyzer
- ConnectorStartFailureAnalyzer
- CompatibilityNotMetFailureAnalyzer
- BeanNotOfRequiredTypeFailureAnalyzer
隨著Spring Boot版本的提升,實(shí)現(xiàn)類有所新增。
注冊(cè)啟動(dòng)異常分析
上面只是編寫指定異常啟動(dòng)分析,接下來(lái)需要讓它生效,這個(gè)生效方式比較特殊,類似于自定義SpringBoot Starter AutoConfiguration的形式,然后每個(gè)FailureAnalyzer都需要配置在META-INF/spring.factories文件中,如:
# Failure analyzers org.springframework.boot.diagnostics.FailureAnalyzer=\ org.springframework.boot.autoconfigure.diagnostics.analyzer.NoSuchBeanDefinitionFailureAnalyzer,\ org.springframework.boot.autoconfigure.jdbc.DataSourceBeanCreationFailureAnalyzer,\ org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer
那我們?yōu)槭裁葱枰褂眠@種方式定義呢? 項(xiàng)目啟動(dòng)遇到的異常順序不能確定,很可能在Spring IOC并未執(zhí)行初始化之前就出現(xiàn)了異常,我們不能通過@Component注解的形式使其生效,所以SpringBoot提供了通過spring.factories配置文件的方式定義。
通過FailureAnalyzer接口攔截獲取到啟動(dòng)時(shí)異常,然后呢,有啥用?不難發(fā)現(xiàn),在同一個(gè)包路徑下面存在FailureAnalysisReporter接口:
public interface FailureAnalysisReporter { void report(FailureAnalysis var1); }
接口實(shí)現(xiàn)類,有所刪減:
@NoArgsConstructor public final class LoggingFailureAnalysisReporter implements FailureAnalysisReporter { public void report(FailureAnalysis failureAnalysis) { logger.debug("Application failed to start due to an exception", failureAnalysis.getCause()); logger.error(this.buildMessage(failureAnalysis)); } private String buildMessage(FailureAnalysis failureAnalysis) { StringBuilder builder = new StringBuilder(); builder.append(String.format("%n%n")); builder.append(String.format("***************************%n")); builder.append(String.format("APPLICATION FAILED TO START%n")); builder.append(String.format("***************************%n%n")); builder.append(String.format("Description:%n%n")); builder.append(String.format("%s%n", failureAnalysis.getDescription())); if (StringUtils.hasText(failureAnalysis.getAction())) { builder.append(String.format("%nAction:%n%n")); builder.append(String.format("%s%n", failureAnalysis.getAction())); } return builder.toString(); } }
到次,發(fā)現(xiàn)熟悉的控制臺(tái)輸出:APPLICATION FAILED TO START
使用
自定義類 CustomFailedAnalyzer 實(shí)現(xiàn)接口 FailureAnalyzer,重寫方法 FailureAnalysis analyze(Throwable failure);
配置文件spring.factories放置在resources/META-INF org.springframework.boot.diagnostics.FailureAnalyzer=com.awesome.CustomFailedAnalyzer
到此這篇關(guān)于SpringBoot中FailureAnalyzer的使用詳解的文章就介紹到這了,更多相關(guān)FailureAnalyzer的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot的java -jar命令啟動(dòng)原理解讀
這篇文章主要介紹了SpringBoot的java -jar命令啟動(dòng)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02SpringBoot使用Nacos進(jìn)行application.yml配置管理詳解
Nacos是阿里巴巴開源的一個(gè)微服務(wù)配置管理和服務(wù)發(fā)現(xiàn)的解決方案,下面我們來(lái)看看在SpringBoot中如何使用Nacos進(jìn)行application.yml配置管理吧2025-03-03Java+mysql實(shí)現(xiàn)學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java+mysql實(shí)現(xiàn)學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07Java經(jīng)典設(shè)計(jì)模式之適配器模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之適配器模式,簡(jiǎn)單說(shuō)明了適配器模式的概念、原理,并結(jié)合實(shí)例形式分析了java適配器模式的用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08使用dom4j實(shí)現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串
這篇文章主要為大家詳細(xì)介紹了如何使用dom4j實(shí)現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11Java正則驗(yàn)證字串符RegexValidator類使用
正則驗(yàn)證字串符是一種強(qiáng)大的工具,可以幫助程序員在處理字符串時(shí)輕松進(jìn)行復(fù)雜匹配,本文將介紹正則表達(dá)式的概念、語(yǔ)法和在編程中的應(yīng)用,并通過實(shí)例演示如何使用正則表達(dá)式進(jìn)行字符串匹配、替換和提取等操作2023-11-11Java 獲取Web項(xiàng)目相對(duì)webapp地址的實(shí)例
下面小編就為大家?guī)?lái)一篇Java 獲取Web項(xiàng)目相對(duì)webapp地址的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-11-11