SpringBoot中FailureAnalyzer的使用詳解
FailureAnalyzer的使用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
功能定位:攔截啟動時異常,將異常轉換成更加易讀的信息并包裝成org.springframework.boot.diagnostics.FailureAnalysis對象,監(jiān)控應用啟動過程。
FailureAnalysis是一個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 抽象類實現 FailureAnalyzer 接口,SpringBoot 已經提供一系列 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版本的提升,實現類有所新增。
注冊啟動異常分析
上面只是編寫指定異常啟動分析,接下來需要讓它生效,這個生效方式比較特殊,類似于自定義SpringBoot Starter AutoConfiguration的形式,然后每個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)槭裁葱枰褂眠@種方式定義呢? 項目啟動遇到的異常順序不能確定,很可能在Spring IOC并未執(zhí)行初始化之前就出現了異常,我們不能通過@Component注解的形式使其生效,所以SpringBoot提供了通過spring.factories配置文件的方式定義。
通過FailureAnalyzer接口攔截獲取到啟動時異常,然后呢,有啥用?不難發(fā)現,在同一個包路徑下面存在FailureAnalysisReporter接口:
public interface FailureAnalysisReporter {
void report(FailureAnalysis var1);
}接口實現類,有所刪減:
@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ā)現熟悉的控制臺輸出:APPLICATION FAILED TO START
使用
自定義類 CustomFailedAnalyzer 實現接口 FailureAnalyzer,重寫方法 FailureAnalysis analyze(Throwable failure);
配置文件spring.factories放置在resources/META-INF org.springframework.boot.diagnostics.FailureAnalyzer=com.awesome.CustomFailedAnalyzer
到此這篇關于SpringBoot中FailureAnalyzer的使用詳解的文章就介紹到這了,更多相關FailureAnalyzer的使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot使用Nacos進行application.yml配置管理詳解
Nacos是阿里巴巴開源的一個微服務配置管理和服務發(fā)現的解決方案,下面我們來看看在SpringBoot中如何使用Nacos進行application.yml配置管理吧2025-03-03

