SpringBoot中的自定义FailureAnalyzer详解
介绍
FailureAnalyzer是一种很好的方式在启动时拦截异常并将其转换为易读的消息,并将其包含在FailureAnalysis中。 Spring Boot为应用程序上下文相关异常、JSR-303验证等提供了此类分析器。 实际上也是非常容易创建自己的FailureAnalyzer。
AbstractFailureAnalyzer是FailureAnalyzer的一个抽象实现,它检查要处理的异常中是否存在指定的异常类型。 我们可以从中进行扩展,以便存在指定的异常时有机会去处理。 如果由于某种原因无法处理异常,则返回null以使另一个实现有机会处理异常。
代码示例
检查java.lang.NullPointerException异常
继承AbstractFailureAnalyzer,重写analyze方法,返回FailureAnalysis。泛型的类型是Throwable的子类。
package com.example.demo.failureAnalyzer;
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;
import org.springframework.boot.diagnostics.FailureAnalysis;
public class NullPointFailureAnalyzer extends AbstractFailureAnalyzer<NullPointerException> {
@Override
protected FailureAnalysis analyze(Throwable rootFailure, NullPointerException cause) {
return new FailureAnalysis(cause.getMessage(), "请检查空指针", cause);
}
}spring.factories注册
#src/main/resources/META-INF中添加spring.factories,并注册自定义的FailureAnalyzer: org.springframework.boot.diagnostics.FailureAnalyzer=\ com.momo.springbootfailureanalyzer.ArithmeticFailureAnalyzer
测试
定义一个NullPointException,如null.equal(ss)。SpringBoot在启动时会创建这个bean,在执行方法时由于null.equal(ss)的原因会抛出java.lang.NullPointerException运行时异常,此时通过自定义的FailureAnalyzer进行捕获并处理该异常。
@Service
public class ValidateNullPointExceptionService {
public ValidateNullPointExceptionService() {
Integer a = null;
System.out.println(a.equals("88"));
}
}启动时控制台打印的信息
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-02-26 16:48:24.228 ERROR 28488 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
null
Action:
请检查空指针
Process finished with exit code 1
到此这篇关于SpringBoot中的自定义FailureAnalyzer详解的文章就介绍到这了,更多相关自定义FailureAnalyzer内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考
这篇文章主要介绍了浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09
Java并发编程之栅栏(CyclicBarrier)实例介绍
这篇文章主要介绍了Java并发编程之栅栏(CyclicBarrier)实例介绍,栅栏类似闭锁,但是它们是有区别的,需要的朋友可以参考下2015-04-04
基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能
这篇文章主要为大家详细介绍了基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-05-05
SpringBoot之RestTemplate在URL中转义字符的问题
这篇文章主要介绍了SpringBoot之RestTemplate在URL中转义字符的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-06-06


最新评论