定时任务
简介:常用的两种定时任务一种是后台配置的(比如定时做数据拉取),一种是支持前端可配置时间的
一、 不可更改定时任务
1、基于springboot静态注解(@Scheduled)
在定时任务方法上加上@Scheduled,时间配置的cron参数,如何生成参考链接【1】。
启动类需要允许定时,加上注解@EnableScheduling
@EnableScheduling
@Scheduled里还支持其他参数,如:
@Scheduled(fixedDelay = 5000) //上一次执行完毕时间点之后5秒再执行
@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
参考链接:
【1】cron自动生成:https://www.pppet.net/
2、基于XXjob的定时任务
XXjob服务主要是由执行器和JobHandler组成的,一个执行器下边可
以包含多个JobHandler通过调度(线程)执行。
摘自其他链接
运行的基本原理是:初始化调度中心,启动监控、调度器,当调用JobHandler时,会将JobHandler注册到注册中心,调度中心会调用线程执行该job。
举个例子:
导入依赖
依赖
执行器的配置
执行器配置
定时任务的执行:
定时任务
参考链接:
【1】原理:https://www.cnblogs.com/guoyinli/p/11555035.html
二、 支持用户自定义定时任务
实现目标是:支持用户可配置的定时任务
设计思想是:数据库表存放cron,便于前后端取,采用
ThreadPoolTaskScheduler线程池进行任务的调度,如果后端配置cron和前端用户设置的cron不同,则取用户配置的cron调用定时方法。
举个例子:
image.png
数据库
新建线程
初始化定时任务
ThreadPoolTaskScheduler:线程池任务调度类,能够开启线程池进行任务调度。
ThreadPoolTaskScheduler.schedule()方法会创建一个定时计划ScheduledFuture,在这个方法需要添加两个参数,Runnable(线程接口类) 和CronTrigger(定时任务触发器)
修改定时任务
参考链接:
【1】参数详解:https://my.oschina.net/sdlvzg/blog/1590946