SpringBoot之异常报告器源码分析
2021-10-05 本文已影响0人
IT小分享
一 什么是异常报告器
收集错误信息,用于向用户报告错误原因。
二 异常报告器的作用
1 程序运行失败的时候会在控制台或者日志上打印出一个具体的错误报告,以方便排查问题。
三 异常报告器源码分析
1 在SpringApplication构造函数中调用setInitializers,加载spring.factories文件,把FailAnalyzed子类全限定名封装进List集合中。
2 在run函数中,创建FailureAnalyzed实例,在构造函数中,在缓存中获取FailureAnalyzed子类全限定名存于List集合中,接着循环集合使用反射创建FailureAnalyzed子类实例并存于List集合中。
3 当run函数中有异常抛出则执行handleRunFailure函数,循环执行listeners.finished(context, exception);发送事件(ApplicationFailed事件),在广播器实例函数multicastEvent循环取出监听器实例并检验事件(ApplicationFailed)是否属于监听器,成立则调用函数处理。
取出监听器完成
广播器广播事件(ApplicationFailed)
监听器处理事件(ApplicationFailed)
4 执行reportFailure 函数,循环取出FailureAnalyzed子类实例,判断异常是否属于某个Class实例属于则返回FailureAnalyzed子类实例, 再通过FailureAnalyzedReport实例输出FailureAnalyzed异常信息。
获取异常对应的FailureAnalyzed
查找异常对应的FailureAnalysis实例
异常报告器输出异常信息
异常信息格式化构建输出