由于业务需要,停止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: