定时任务可以内部处理异常,记录日志。你定时任务没有用户啊,你这么捕获异常这提示给谁?
定时任务是与前端用户没有交互的,所有是没法走RestControllerAdvice的,如果你想给前端用户展示,你能新建一张表,然后每次运行时插入一条记录,异常就把异常转换为String,然后入库,最后通过一个列表的接口给用户展示,可以用apache的lang3包
org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e)
其实你就是想定位问题嘛,定位问题的方式有很多:
具体就看你像怎么处理问题了
统一捕获定时任务的异常并插入数据库.
整体来说都需要你自己将异常往一个固定的地方送.要么直接送数据库,要么送到一个特定地点等待其他程序将其送入数据库
要将定时任务异常信息入库,我提供两种可选方式,
一是自己直接在定时任务内捕获,然后调用dao往数据库存
二是发布一个定时任务异常的事件,由事件订阅者去处理.
如果你是想在一个类似ControllerAdvice的类中对各种定时任务中可能出现的异常做统一处理,那建议使用第二种方式.
在定时任务中捕获异常,然后使用事件发布将异常事件发布出去.
异常事件你看一下你具体有几类异常要处理,定义不同的事件,或者就只定义一个事件,将事件源(发生异常的定时任务本身)和异常对象放到事件对象中,再处理时直接判断异常类型.
处理你的事件的是一个事件监听器(你自己定义),其监听指定类型的事件,就像ControllerAdvice捕获指定的异常.
具体的使用方式参考springboot 事件机制.
定时任务中发布事件需要获取发布者对象,这个可以声明一个上下文类,将其注入到spring,同时提供静态get上下文的方法,再从中get发布者.
Spring异常处理@ControllerAdvice+@ExceptionHandler注解的使用
https://blog.csdn.net/y516369/article/details/125592500