文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ThreadPoolTaskScheduler轻量级多线程定时任务框架

2023-08-30 12:08

关注

前言

面对一些小的功能需求点,如果需要非常灵活的进行处理定时任务处理,但是又因为你的需求需要使用到页面进行定时任务配置,显然使用Spring注解定时任务,无法满足你,这时你想到了xxl-job 或者 quezy等定时任务框架,但是过于繁琐,可能成本较大。那么本文将要解决你的问题。


一、ThreadPoolTaskScheduler是什么?

二、上干货

1.ThreadPoolTaskScheduler常用的api介绍

ThreadPoolTaskScheduler 内部方法非常丰富,本文实现的是一种corn表达式,周期执行

2.springboot中创建配置类

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;@Configurationpublic class TaskConfig {    //配置定时任务线程池-自定义名称避免冲突    @Bean(name = "myThreadPoolTaskScheduler")    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {        ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();        executor.setPoolSize(2);        executor.setThreadNamePrefix("task-");        executor.setWaitForTasksToCompleteOnShutdown(true);        executor.setAwaitTerminationSeconds(60);        return executor;    }}

3.实现Runnable的业务处理类

代码如下(示例):

@Slf4jpublic class RunSameThing implements Runnable{    @Override    public void run() {        log.info("===我执行了===");    }}

4.业务处理服务service

import java.util.concurrent.ScheduledFuture;import javax.annotation.Resource;import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;import org.springframework.scheduling.support.CronTrigger;import org.springframework.stereotype.Service;@Service@Slf4jpublic class CommonTask {    @Resource(name = "myThreadPoolTaskScheduler")    private ThreadPoolTaskScheduler taskScheduler;    private ScheduledFuture future;//开启任务    public void startTask(){        //每次调用前,可执行一次关闭之前的        stop();//每秒执行-corn 表达式可传参形式        String cron = "0/1 * * * * ?";        //RunSameThing 为执行的业务逻辑        future = taskScheduler.schedule(new RunSameThing(), new CronTrigger(cron));    }//关闭任务    public void stop() {        if (future != null) {            log.info("我关闭了");            future.cancel(true);        }    }}

5.调用controller

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/task")public class TestTaskController {    @Autowired    private CommonTask commonTask;    @RequestMapping("start")    public void startTask(){        commonTask.startTask();    }    @RequestMapping("end")    public void endTask(){        commonTask.stop();    }}

6.让我们看看运行结果

task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-2] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-2] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-2] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-1] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===task-2] com.easy.wheel.scheduler.RunSameThing    : ===我执行了===[nio-8080-exec-2] com.easy.wheel.scheduler.CommonTask      : 我关闭了

线程池配置的两个线程,可以看到task-1 和 task-2 交替支持,达到了我们想要的效果,关闭也能正常进行关闭,nice。这个轮子搞定了,下次写代码直接复制。巴适


总结

生活不能止步不前,为了更多的时间陪陪家人,轮子用起来啊,亲

来源地址:https://blog.csdn.net/weixin_43480441/article/details/127869051

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯