- 首先我们提供一个注册器,注册器的功能就是管理定时任务 。提供增加删除功能 。在增加定时器的节点上我们调用scheduler.schedule(task, new CronTrigger("*/2 * * * * ?"));来启动定时任务 。在删除节点上调用之前获取的ScheduledFuture来canel这个定时任务 。这样做的好处我们可以随时控制定时任务的开关
public void addCronTask(Runnable task, String cron) {addCronTask(new CronTask(task,cron));}
- 上面添加需要有一个runnable和cron表达式 。用一个ConcurrentHashMap来管理添加进来的runnable 。runnable为key,ScheduledTask为值 。
public ScheduledTask scheduleCronTask(CronTask cronTask) {ScheduledTask scheduledTask;scheduledTask = new ScheduledTask();scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());return scheduledTask;}
- 这样构建一个ScheduledTask对象 。
public final class ScheduledTask {public volatile ScheduledFuture<!--?--> future;/*** 取消定时任务*/public void cancel() {ScheduledFuture<!--?--> future = this.future;if (future != null) {future.cancel(true);}}}
- 这样我们就可以通过构建一个runnable线程,结合表达式通过注册器注册就可以开启这个线程已固定频率执行 。通过remove关闭线程 。
SchedulingRunnable task = new SchedulingRunnable(TestMapper.class, "getTests", null);cronTaskRegistrar.addCronTask(task, "0/10 * * * * ?");
- 这样做的好处是我们可以在表数据修改的情况下立马更新定时任务规则 。
点我传送
https://gitee.com/zxhTom/crontab.git
- 下面Java类是我们这次使用用到的类 。
- SchedulingConfigurer
- DisposableBean
- ConcurrentHashMap
原文链接:如果觉得本文对你有帮助,可以转发关注支持一下
https://www.cnblogs.com/zhangxinhua/p/14830103.html
推荐阅读
- SpringBoot的可视化接口开发工具
- SSM三大框架整合详细教程
- SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身
- mybatis-plus整合clickhouse
- Springboot 动态设置注解参数值
- 聊一聊 SpringBoot 中配置加载优先级?
- 一文搞懂GoLang定时器实现原理
- springboot三种拦截器
- SpringBoot集成多数据源
- SpringBoot整合RabbitMQ四种交换机类型详解