java quartz 停止_Quartz 定时任务使用 —— 中断正在执行的任务(九)

bc7fdfc03a181785f939cc7c3cabcadc.gif

由于业务需要,停止Quartz中正在执行的任务

1、任务类只需要实现InterruptableJob类,然后实现interrupt()方法。

2、在这个方法中进行标记的改变,在执行中进行这个标记判断,就可实现中断任务了

3、另外在调度器上调用方法:sched.interrupt(job.getKey())

源码示例:

job类

package com.anson.examples.example7;

import org.quartz.*;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* 一个可执行的中断可执行程序,用于单元测试。

*/

public class DumbInterruptableJob implements InterruptableJob {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

private boolean _interrupted = false; // job 是否中断

private JobKey _jobKey = null; // job name

private static int counts = 0; // 中断执行次数

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

_jobKey = context.getJobDetail().getKey();

System.out.println("【开始执行】任务Key:" + _jobKey + ",执行时间: " + sdf.format(new Date()));

try {

for (int i = 0; i < 4; i++) {

try {

Thread.sleep(1000L);

} catch (Exception e) {

e.printStackTrace();

}

// 查看是否中断

if (_interrupted) {

counts++;

System.out.println("被外界因素停止了这个任务key:" + _jobKey + ",中断累计次数: " + counts + "\n");

return; // 也可以选择抛出一个JobExecutionException,根据业务需要指定行为

}

}

} finally {

System.out.println("【完成任务】key:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个开源的作业调度框架,可以用来调度Java应用程序中的任务。在Quartz中,任务是由一个Trigger和一个Job组成的。Trigger定义了任务何时执行,Job则定义了任务具体要做什么。在Quartz中,我们可以通过编写代码来创建Trigger和Job,并将它们注册到Scheduler中,Scheduler会按照Trigger定义的时间执行Job。 在Quartz中,时间的定义是通过Cron表达式来进行的。Cron表达式是一个字符串,包含6或7个字段,每个字段表示一个时间单位。下面是一个标准的Cron表达式的格式: ``` 秒 分 时 日 月 周 年(可选) ``` 其中,每个字段的含义如下: - 秒:0-59 - 分:0-59 - 时:0-23 - 日:1-31 - 月:1-12 - 周:0-6(0表示周日,1表示周一,以此类推) - 年:可选,表示指定的年份(例如2021) 下面是一个例子: ``` 0 0/5 8-18 * * ? // 每天8点到18点之间,每隔5分钟执行一次 ``` 这个表达式的意思是,在每天的8点到18点之间,每隔5分钟执行一次。 在Quartz中,我们可以通过Cron表达式来定义Trigger的执行时间。下面是一个例子: ```java // 创建一个Trigger,并设置执行时间为每天的8点到18点之间,每隔5分钟执行一次 Trigger trigger = TriggerBuilder.newTrigger() .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 8-18 * * ?")) .build(); ``` 这个例子中,我们通过CronScheduleBuilder来创建一个Cron表达式,并将其设置到Trigger中。然后,我们可以将这个Trigger注册到Scheduler中,Scheduler会按照Trigger定义的时间执行Job。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值