Exception捕捉的全局处理的两种实现方式

场景描述:
公司内部的一些微服务偶尔会出现问题,服务请求超时或一些其他问题。因此需要做一个服务监控的模块,每小时对服务接口进行测试,如果 出现异常则发送邮件给管理员。

方案一:
@ControllerAdvice和ExceptionHandler实现Controler层的异常捕捉并处理

ControllerAdvice注解配置了一个全局异常注解类,来统一处理controller层的异常,ExceptionHandler注解标记的方法实现而且controller层中也可以不用写try/catch,使得代码更加简洁。如果使用try/catch,则需要在catch块中将异常抛出,否则会捕捉不到。

优点:将controller层的异常和数据校验的异常进行统一处理,减少模板代码,提升扩展性和可维护性。
缺点:只能捕获controller层未捕获或抛出的异常,对于Interception(拦截器)和spring框架其他层的异常无能为例。

由于上述缺点,只能捕获controller层的异常,也就是针对每个接口的requestMapping下的异常,需要前端传入httprequest对象,但是本次需求是写一个定时任务,用到的是@Scheduled注解,需要标注在无参的方法上定时运行,只要启动springboot项目后便可以运行方法,因此需要另寻他法。

方案二:
基于Aop实现异常的增强处理(@Aspect和@AfterThrowing注解)

首先写一个捕捉到异常后进行增强处理的类,使用@Aspect标记为切面。编写方法表示捕捉到异常后进行的逻辑,标记@AfterThrowing,属性内需要写明切点,一般是写到包的层次,表示该包下的异常抛出后会被执行afterThrowing的逻辑。

    @AfterThrowing(pointcut = "execution(* com.xxxxx.service..*.*(..))",throwing = "e")
    public void handle (Exception e){
        //处理逻辑
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值