XXL-JOB任务有效期支持实现方案
创始人
2024-02-06 09:13:44

概述

在做数据产品或平台系统时,经常会遇到类似如下截图中,有截至日期的定时调度任务的需求。即定时任务只在指定的开始日期-截至日期里指定的时间里执行。具体的业务需求场景,如营销活动的看板数据的订阅邮件,推送名单的活动,活动(双十一,六一八)结束后就不再需要执行任务。
在这里插入图片描述
注:因为使用的Java语言的定时调度平台是XXL-JOB。

需求分析

查看XXL-JOB管理平台:
在这里插入图片描述
发现没有任务开始日期和结束日期的概念。这一点可以在源码com.xxl.job.core.biz.model.JobEntity.java得到验证:

public class JobEntity implements Serializable {private int id;private int jobGroup;private String jobCron;private String jobDesc;private Date addTime;private Date updateTime;private String author;private String alarmEmail;private String executorRouteStrategy;private String executorHandler;private String executorParam;private String executorBlockStrategy;private String executorFailStrategy;private String glueType;private String glueSource;private String glueRemark;private Date glueUpdatetime;private String childJobKey;private String jobStatus;
}

注:GitHub的代码,找不到这个类,奇怪。

实现

针对截图1的表设计如下(省略无关字段):

create table job (job_id          bigint auto_increment primary key,job_name        varchar(200)         null comment '订阅名称',cron_exp        varchar(200)         null comment 'cron',cron_exp_status tinyint(1) default 1 null comment '1表示任务有效,0表示任务关闭',start_date      timestamp            null comment '订阅开始时间 yyyy-MM-dd',end_date        timestamp            null comment '订阅结束时间 yyyy-MM-dd',xxl_job_id      varchar(50)          null comment 'xxl-job id',is_active       tinyint(1) default 1 null comment '逻辑删除,1表示有效'
);

新增一个JobHandler,每天0点2分执行,判断当前日期(天粒度)是否达到end_date,如果达到,则设置cron_exp_status=0,并同步到XXL-JOB平台,XXL-JOB平台则不再继续调度此任务。


/*** 订阅邮件job有效期结束后,暂停任务** @author johnny*/
@Slf4j
@Component
@JobHander(value = "stopExecuteJobHandler")
public class StopExecuteJobHandler  extends IJobHandler {@Resourceprivate JobMapper jobMapper;@Resourceprivate JobService jobService;@Overridepublic ReturnT execute(String... strings) throws Exception {List jobList = jobMapper.getAllStoppedJob();if (CollectionUtils.isEmpty(jobList)) {log.info(String.format("%s: 没有需要暂停调度的任务", DateUtil.getNow()));return ReturnT.SUCCESS;}for (DashboardJob item : jobList) {jobMapper.stopJob(item.getId());jobService.disableJob(item.getXxlJobId());}return ReturnT.SUCCESS;}
}

对应的mapper.xml文件:

UPDATE job SET cron_exp_status = 0 WHERE job_id = #{jobId} AND isactive = 1

封装XXL-JOB提供的JobRestApi的JobService.java


@Resource
private JobRestApi jobRestApi;
/*** 暂停Job的调度*/
public void disableJob(Integer id) throws Exception {if (id == null) {return;}ReturnT returnT = jobRestApi.disableJob(id);if (returnT.getCode() != CODE) {throw new Exception(returnT.getMsg());}
}

反思

Quartz任务有任务截至有效期,不明白为啥XXL-JOB调度平台没有这个概念。

看GitHub动态,XXL-JOB几乎处于停止维护状态,需要forkGit仓库后二次开发。

参考

分布式任务调度平台XXL-JOB深度实战

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...