SpringBoot 异常报告器解析

介绍

SpringBootExceptionReporter用于捕获和处理启动期间的异常,例如应用程序上下文的初始化失败。我们业务中的异常处理一般使用拦截器进行拦截处理业务异常。

异常报告流程解析

框架内实现

reportException实现

FailureAnalyzer介绍

analyze逻辑

FailureAnalysisReporter介绍

  • 功能: 报告异常给到用户
  • 实现类: LoggingFailureAnalysisReport
  • 实现方法: 根据失败分析结果类构建错误信息输出

异常处理流程解析

处理入口

异常处理入口handleRunFailure()方法

try {
    ......
}
catch (Throwable ex) {
    handleRunFailure()
}

handleRunFailure逻辑

handleExitCode逻辑

  • exitcode退出状态码, 为0代表正常退出, 否则异常退出
  • 发布ExitCodeEvent事件
  • 记录exitcode

listener.failed逻辑

  • 发布ApplicationFailedEvent事件

reportFailure逻辑

  • SpringBootExceptionReporter实现调用reportException方法
  • 成功处理的话记录已处理异常

context.close逻辑

  • 更改应用上下文状态
  • 销毁单例bean
  • beanFactory置为空
  • 关闭web容器(web环境)
  • 移除shutdownHook

shutdownHook介绍

  • 作用jivm退出时执行的业务逻辑
  • 添加:Runtime.getRuntime().addShutdownHook
  • 移除:Runtime.getRuntime().removeShutdownHook

ReflectionUtils.rethrowRuntimeException逻辑

  • 重新抛出异常

实战

@Component
public class MyExitCodeExceptionMapper implements ExitCodeExceptionMapper {
    @Override
    public int getExitCode(Throwable exception) {
        if (exception instanceof ConnectorStartFailedException) {
            return 10;
        }
        return 0;
    }
}
public class MyExceptionReporter implements SpringBootExceptionReporter {

    private ConfigurableApplicationContext context;

    public MyExceptionReporter(ConfigurableApplicationContext context) {
        this.context = context;
    }

    @Override
    public boolean reportException(Throwable failure) {
        if (failure instanceof UnsatisfiedDependencyException) {
            UnsatisfiedDependencyException exception = (UnsatisfiedDependencyException) failure;
            System.out.println("no such bean " + exception.getInjectionPoint().getField().getName() );
        }
        return false;
    }
}

面试题

  • 关闭钩子方法的作用及使用方法?
  • 介绍下SpringBoot异常报告器类结构?
  • 介绍下SpringBoot昇常报告器的实现原理?
  • 讲述下SpringBoot异常处理流程?
  • SpringBoot异常处理流程中有哪些注意事项?
  • 如何自定义实现SpringBoot异常报告器?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/339084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构·顺序表应用

本节应用是要用顺序表实现一个通讯录,收录联系人的姓名、性别、电话号码、住址、年龄 ​​​​​​​ 顺序表的实现在上一节中已经完成了,本节的任务其实就是应用上节写出来的代码的那些接口函数功能,做出来一个好看的,可…

1.电子基础

https://www.falstad.com/circuit/circuitjs.html vcc:正极 三角形:负极 理想电路原件 电压源、电流源 电压源:正负号表示电压方向 电流源:箭头表示电流方向

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(9)

华研荟继续为您分享【过程Process领域】的新考纲下的真题,帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识(经验)来解题,并且举一反三,一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-【过程领…

Drivable 3D Gaussian Avatars 论文笔记

Drivable 3D Gaussian Avatars 论文笔记 主要的算法架构和贡献是什么?如何使用这个deformation 呢? 主要的算法架构和贡献是什么? 这篇文章主要使用了两个当前流行的概念,一是3D高斯溅射,二是cage-based deformation。…

java SSM政府采购管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM政府采购管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

DC-7靶机做题记录

靶机下载地址: 链接:https://pan.baidu.com/s/1w2c_QKd_hOoR2AzNrdZjMg?pwdtdky 提取码:tdky 参考: DC7靶机地址:http://www.five86.com/downloads/DC-7.zipDC7靶场介绍: https://www.vulnhub.com/entry/dc-7,356/…

Matlab/simulink风储调频,多台飞轮储能调频,风电场调频,飞轮储能带有虚拟惯量和下垂控制,三机九节点系统一次调频,离散模型

上述为不同飞轮储能容量配比,风电场容量配比,以及有无附加频率控制的飞轮储能出力分析。 飞轮储能驱动电机为永磁同步机电机PMSG 有无飞轮储能容量较小,所以对频率的改善效果有限,不过可以继续增大容量,从而增大频率的…

数据结构之顺序表的增删查改

别丢了你的勇敢 前言: 自今日起,我们正式越过C语言的大山,走向了数据结构的深山,现如今摆在我们面前的第一个坎就是顺序表,我们需要了解顺序表的定义,并且知道,如何对其进行增删查改&#xff0…

unicloud 云对象 schema

目录 云对象 创建云对象 客户端调用 二、Schema(表结构) 什么是Schema? 如何编写DB Schema Schema的一级节点 客户端直连数据库 字段属性 字段类型bsonType 默认值defaultValue/forceDefaultValue 云对象 创建云对象 云对象&#…

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验 目录 智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数…

mqtt连接阿里云

参考文章:https://blog.csdn.net/fang_dz999/article/details/112283742?app_version6.2.5&codeapp_1562916241&csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22112283742%22%2C%22source%22%3A%22mantouyouy…

JAVA中TreeSet集合的两种排序方法:自然排序和比较器排序

TreeSet支持2种排序:自然排序、比较器排序。 由于TreeSet对内部元素的排序的方法有2种:自然顺序排序、比较器排序。 所以,如果TreeSet采用自然顺序排序,需要内部的元素(即自定义类型)实现Comparable接口。…

前后对比效果展示的视频怎么制作?左右对比PR模板 Before and After v.2

10种表现方式,前后对比效果展示视频制作PR模板 Before and After v.2 如果您想比较两个图像或视频,这个Adobe Premiere Pro模板非常适合您。只需将两个文件拖放到媒体中,就可以开始了。 适合PS处理图片后期修图前后对比,AI绘图效果…

企业Oracle1 数据库管理

Oracle的安装 一、基础表的创建 1.1 切换到scott用户 用sys 账户 登录 解锁scott账户 alter user scott account unlock;conn scott/tiger;发现并不存在scott账户,自己创建一个? 查找资料后发现,scott用户的脚本需要自己执行一下 C:\ap…

FDM3D打印系列——宝可梦妙蛙种子

fdm打印妙蛙种子 大家好,我是阿赵。   每次打印3D模型,都有新的感觉,这次打印了个宝可梦里面的妙蛙种子,也就是俗称的蒜头王八。   先来看看成果,然后在后面再聊一下关于3D打印的一些体会。使用创想三维的Sermoon …

Linux内核pinctrl子系统驱动框架

一. 简介 本文简单了解一下Linux内核代码中, pinctrl子系统的驱动实现。 注意:本文会涉及到 Linux 驱动分层与分离、平台设备驱动等还未讲解的知识 ,所以,也不会影响后续的实验。 二. Linux内核pinctrl子系统驱动 1. probe函…

C++笔记之bool类型的隐式转换现象与应用

C++笔记之bool类型的隐式转换现象与应用 —— 《C++ Primer Plus》 文章目录 C++笔记之bool类型的隐式转换现象与应用1.C++中,有几种类型和表达式可以隐式转换为bool类型2.使用explicit关键字来声明显示转换运算符,这样只有在使用static_cast<bool>时才能将对象转换为…

蓝桥杯理历年真题 —— 数学

1. 买不到的数目 这道题目&#xff0c;考得就是一个日常数学的积累&#xff0c;如果你学过这个公式的话&#xff0c;就是一道非常简单的输出问题&#xff1b;可是如果没学过&#xff0c;就非常吃亏&#xff0c;在考场上只能暴力求解&#xff0c;或是寻找规律。这就要求我们什么…

vue中的插槽

在vue中&#xff0c;有的名词听着高大上&#xff0c;挺怪异的&#xff0c;比如插槽&#xff0c;就是slot&#xff0c;它的作用是为了解决组件之间写的内容在组件中的使用问题。 一、插槽的作用 <!DOCTYPE html> <html> <head><title>Vue中的插槽</…

nginx虚拟主机

虚拟主机指的就是一个独立的站点配置&#xff0c;是nginx默认支持的一个功能&#xff0c;它能够有自己独立的域名&#xff0c;独立的ip&#xff0c;独立的端口配置&#xff0c;能够配置完整的www服务&#xff0c;列如网站搭建&#xff0c;邮件服务器代理等等。并且nginx支持多虚…