您当前位置:资讯中心 >开发 >浏览文章

springboot-如何配置线程池实现定时任务

来源: 今日头条 日期:2024/2/28 9:54:07 阅读量:(0)

一、步骤概览

二、步骤说明

1.封装自定义线程池

封装自定义线程池类是为了在线程执行完毕后,我们检查是否存在异常,如果存在异常,日志打印详细异常信息,这样可以可以帮助我们及时发现和解决问题。

JDK 默认提供的定时调度线程池类是
ScheduledThreadPoolExecutor,我们只需要继承它并重写它的 afterExecute 方法,添加异常日志打印的逻辑。

  • MyScheduledThreadPoolExecutor
public class MyScheduledThreadPoolExecutor extends ScheduledThreadPoolExecutor {
    private Logger log = LoggerFactory.getLogger(MyScheduledThreadPoolExecutor.class);

    public MyScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory factory) {
        super(corePoolSize, factory);
    }

    @Override
    protected void afterExecute(Runnable r, Throwable t) {
        super.afterExecute(r, t);
        // 打印异常信息
        this.printException(r, t);
    }

    public void printException(Runnable r, Throwable t) {
        // 判断 r 是 Future 实例并且已经完成执行的情况下,获取它的执行结果,并检查是否有异常抛出
        if (t == null && r instanceof Future<?>) {
            try {
                Future<?> future = (Future<?>) r;
                if (future.isDone()) {
                    future.get();
                }
            } catch (CancellationException ce) {
                t = ce;
            } catch (ExecutionException ee) {
                t = ee.getCause();
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt();
            }
        }
        if (t != null) {
            log.error(t.getMessage(), t);
        }
    }
}
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。