springboot故障分析FailureAnalyzer

org.springframework.boot.diagnostics.FailureAnalyzer是springboot框架中的一个接口,用于为应用程序启动失败提供详细的诊断报告。当springboot应用程序无法正常启动时,springboot会尝试查找一个或多个实现了FailureAnalyzer接口的类,以提供关于失败原因的详细信息。

通常,FailureAnalyzer的实现会检查特定的异常或条件,并返回一个FailureAnalyzer对象,该对象包含了对失败的描述、操作建议以及可能的动作链接。

一、FailureAnalyzer故障分析示例:
public class RedisIdentifierFailureAnalyzer extends AbstractFailureAnalyzer<NullPointerException> {
    @Override
    protected FailureAnalysis analyze(Throwable rootFailure, NullPointerException cause) {
        return new FailureAnalysis(cause.getMessage(), "Redis默认数据库标识配置缺失", cause);
    }
}

上述实现类定义好后,还需要在META-INF/spring.factories文件中指定故障分析类:

# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
  com.emily.infrastructure.redis.diagnostics.analyzer.RedisIdentifierFailureAnalyzer

首先不配置Redis默认数据库标识,然后运行应用程序,会触发此故障分析类,可以在控制台看到如下信息:

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 
2024-07-01 20:57:16.194 ERROR default --- [              main] s.b.d.LoggingFailureAnalysisReporter:40   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Redis默认标识不可为空

Action:

Redis默认数据库标识配置缺失
 
Disconnected from the target VM, address: '127.0.0.1:58630', transport: 'socket'

Process finished with exit code 1

二、故障分析启动流程
  1. org.springframework.boot.SpringApplication#run(java.lang.String…)方法try…catch…捕获异常调用handleRunFailure方法;
  2. org.springframework.boot.SpringApplication#handleRunFailure方法调用reportFailure方法;
  3. org.springframework.boot.SpringApplication#reportFailure方法调用FailureAnalyzers类的reportException方法;
  4. org.springframework.boot.diagnostics.FailureAnalyzers#reportException方法调用report方法;
  5. org.springframework.boot.diagnostics.FailureAnalyzers#report方法通过SPI的方式获取spring.factories文件中的故障分析类,并调用org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter#report方法,最终调用buildMessage方法打印故障分析信息。

org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter#buildMessage代码如下:

    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();
    }

开源SDK:https://github.com/mingyang66/spring-parent

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot的运行原理可以分为以下几个方面: 1️⃣ 父依赖:SpringBoot项目的pom.xml文件中会引入一个父依赖,这个父依赖中包含了一些常用的依赖和插件,简化了项目的配置和构建过程。 2️⃣ starter场景启动器:SpringBoot提供了一系列的starter依赖,每个starter都包含了一组相关的依赖和配置,可以方便地引入和配置需要的功能。 3️⃣ 主启动类:SpringBoot项目的主启动类使用@SpringBootApplication注解进行标注,这个注解表示这是一个Spring Boot应用。在主启动类中,通过调用SpringApplication.run方法来启动Spring Boot应用。 4️⃣ spring.factories:Spring Boot使用spring.factories文件来配置自动装配的类。这个文件中定义了一些自动配置类的全限定名,当应用启动时,Spring Boot会根据这些配置来自动装配相应的功能。 5️⃣ SpringApplication.run分析SpringApplication.run方法是Spring Boot应用的入口,它会创建一个SpringApplication实例,并根据配置来启动Spring Boot应用。在启动过程中,会加载配置文件、创建Spring容器、执行自动装配等操作。 总结起来,SpringBoot的原理可以概括为通过父依赖、starter场景启动器、主启动类、spring.factories和SpringApplication.run方法来简化和自动化Spring应用的配置和启动过程。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *2* [SpringBoot运行原理分析](https://blog.csdn.net/gaowenhui2008/article/details/130456549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Springboot工作原理详解](https://blog.csdn.net/huangtenglong/article/details/127862112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值