java之定时任务服务

定时任务,我们每个系统都会涉及到的内容,今天我们来说说,可配置,可控制的定时任务—— quartz

我们将定时任务定义为一个微服务模块,专职跑定时任务。

quartz是由java编写的一个作业调度框架,说的直白点他就是专门的定时任务框架。

定时任务实现的过程

任务实体的c r u d 操作,实际上是相应任务的实体类添加到了scheduler中,实体类中相对应的具体实现方法。

实现具体业务类,他实现了org.quartz.Job类的execute方法。这里面来完成具体的定时任务逻辑。

创建工具类

封装创建、更新、立即执行、暂停、恢复、删除定时任务的特定方法。具体如下:

已创建新的定时任务为例:

public static void createScheduleJob(Scheduler scheduler, ScheduleJob scheduleJob) throws BaseException {
    try {
       //构建job信息
        JobDetail jobDetail = JobBuilder.newJob(ScheduleJobBean.class).withIdentity(getJobKey(scheduleJob.getJobId())).build();

        //表达式调度构建器
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
              .withMisfireHandlingInstructionDoNothing();

        //按新的cronExpression表达式构建一个新的trigger
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getJobId())).withSchedule(scheduleBuilder).build();

        //放入参数,运行时的方法可以获取
        jobDetail.getJobDataMap().put(ScheduleJob.JOB_PARAM_KEY, scheduleJob);

        scheduler.scheduleJob(jobDetail, trigger);
        
        //暂停任务
        if(scheduleJob.getStatus() == ScheduleStatus.PAUSE.getValue()){
           pauseJob(scheduler, scheduleJob.getJobId());
        }
    } catch (SchedulerException e) {
        logger.error("【创建定时任务异常】",e);
        throw new BaseException("创建定时任务失败");
    }
}

这里我们可以看到 CronScheduleBuilder 使我们在这自己通过参数构建出来的,完成实际的schedule调度任务。封装完成后,我们可以看如何调用来完成具体的任务执行。

具体调用逻辑代码如下:

scheduleJob.setStatus(ScheduleStatus.NORMAL.getValue());
if (scheduleJobMapper.insertSelective(scheduleJob) > 0) {
    ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
    return scheduleJob.getJobId();
}

此处显示将我们的具体的配指定人任务入库,后面执行我们自定义的新增定时任务功能来实现真正的执行定人逻辑。

好了,到这里我们的任务定时任务模块中的新增既完成了,后面的修改等等大同小异。

欢迎大家关注我的公众号《coder练习生》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值