1、需求
- 任务可随时手动终止。
- 任务发生异常后,任务终止,再次启动任务能断点续处理。
- 断点续处理:重新启动任务后,业务从上次中断的数据之后开始处理。
2、XXLJob官方文档终止任务方法
3、方案
因为解决方案比较通用,所以将代码写到公共工程chery中,以便复用。
使用JobHandler的init和destroy处理任务数据:init = “JobHandler初始化方法”, destroy = “JobHandler销毁方法”
执行流程:
- 任务启动后,根据类型及状态查询xxlJob任务表
- 如果存在未完成的任务,获取结束id,任务开始
- 处理任务
- 如果发生异常(业务异常、手动终止后的中断异常),更新xxlJob任务表,任务未完成
- 如果任务正常结束,更新xxlJob任务表,任务已完成
4、XXLJob任务表
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE TABLE `job_task` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `state` tinyint(4) NOT NULL DEFAULT '0' COMMENT '处理状态 0 未完成, 1 已完成', `start_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '开始id', `end_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '结束id', `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型', `creationtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `creator` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人', `modifiedtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `modifier` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '修改人', `is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识,0 未删除,1 已删除', PRIMARY KEY (`id`), KEY `idx_type_state` (`type`,`state`) USING BTREE COMMENT 'type、state联合索引' ) COMMENT='XXLJob任务表';
|