利用spring+quartz-scheduler+MySql实现定时任务动态调整
Posted hongshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用spring+quartz-scheduler+MySql实现定时任务动态调整相关的知识,希望对你有一定的参考价值。
一、需求
由于可能要动态调整某些定时任务的执行,然而目前WEB方面的现状是所有定时任务是利用spring @Scheduled注解方式实现,不方便动态在调整定时任务的执行时间
二、分析
在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类。因此第二种方式远比第一种方式来的灵活。所以这个分析设计也是基于spring配置的方式
Quartz中是以分组名+任务名作为任务的唯一key,为与quartz中的实现方式一致,本设计也采用这样的方式
注:spring @Scheduled注解方式,定时任务的执行Job在内存,不方便动态调整,并且不支持比如最后一个工作0 0 17 ? * MON-FRI 0 0 15 LW * ?等诸如此类的cron表达式,功能相对quartz比较弱些
三、实现
3.1 数据表的设计
直接上表吧
CREATE
TABLE
`schedule_job` (
`job_id`
varchar
(45)
NOT
NULL
DEFAULT
''
COMMENT
'任务id,用于区分业务'
,
`job_name`
varchar
(64)
NOT
NULL
DEFAULT
''
COMMENT
'任务名称'
,
`job_group`
varchar
(64)
NOT
NULL
DEFAULT
'DEFAULT'
COMMENT
'任务分组'
,
`job_status`
varchar
(32)
DEFAULT
'1'
COMMENT
'任务状态 0禁用 1启用 2删除'
,
`cron_expression`
varchar
(64)
DEFAULT
NULL
COMMENT
'任务运行时间表达式'
,
`job_desc`
varchar
(256)
DEFAULT
NULL
COMMENT
'任务描述'
,
`create_time`
int
(11)
DEFAULT
NULL
,
`update_time`
int
(11)
DEFAULT
NULL
,
`operator`
varchar
Java + Spring + Quartz-scheduler:在其他工作结束后解雇一个工作
|