quartz2.2.1 example 07代码分析

由于业务需要,停止Quartz中正在执行的任务,我们则继承InterruptableJob

package com.quartz.fsl.test.example7;

import java.util.Date;
import org.quartz.InterruptableJob;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.UnableToInterruptJobException;


import com.qdwb.mlxc.util.LogSelf;


public class DumbInterruptableJob implements InterruptableJob {
private boolean _interrupted = false;
private JobKey _jobKey = null;
public void interrupt() throws UnableToInterruptJobException {
LogSelf.fslLog.info("---" + this._jobKey + "  -- INTERRUPTING --");
this._interrupted = true;
}


public void execute(JobExecutionContext context)
throws JobExecutionException {
this._jobKey = context.getJobDetail().getKey();
LogSelf.fslLog.info("---- " + this._jobKey + " executing at "+ new Date());
try {
for (int i = 0; i < 4; ++i) {
try {
Thread.sleep(1000L);
} catch (Exception ignore) {
ignore.printStackTrace();
}


if (this._interrupted) {
LogSelf.fslLog.info("--- " + this._jobKey+ "  -- Interrupted... bailing out!");
return;
}
}
} finally {
LogSelf.fslLog.info("---- " + this._jobKey + " completed at "+ new Date());
}
}


}

-----------------------------------

package com.quartz.fsl.test.example7;


import java.util.Date;
import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;


import com.qdwb.mlxc.util.LogSelf;


public class InterruptExample {
public void run() throws Exception {


SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
Date startTime = DateBuilder.nextGivenSecondDate(null, 15);


JobDetail job = JobBuilder.newJob(DumbInterruptableJob.class)
.withIdentity("interruptableJob1", "group1").build();


//每5秒执行一次该job
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1").startAt(startTime)
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever())
.build();


Date ft = sched.scheduleJob(job, trigger);
LogSelf.fslLog.info(job.getKey() + " 将会运行时间: " + ft + " 重复次数: "
+ trigger.getRepeatCount() + " 次,每隔"
+ (trigger.getRepeatInterval() / 1000L) + " 秒");


LogSelf.fslLog.info("------- 手动触发Scheduler -----------------");
sched.start();


LogSelf.fslLog.info("-------循环10次   每隔7秒中断----------");
for (int i = 0; i < 10;) {
try {
Thread.sleep(7000L);
sched.interrupt(job.getKey());
} catch (Exception e) {
}
++i;
}


LogSelf.fslLog.info("------- Shutting Down 触发器---------------------");


sched.shutdown(true);


SchedulerMetaData metaData = sched.getMetaData();
LogSelf.fslLog.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
}


public static void main(String[] args) throws Exception {
InterruptExample example = new InterruptExample();
example.run();
}
}

---------------------测试结果:

log4j:ERROR Could not find value for key log4j.appender.stdout
log4j:ERROR Could not instantiate appender named "stdout".
[quartz2.2.1][INFO ] 2014-06-30 14:48:31 -- main group1.interruptableJob1 将会运行时间: Mon Jun 30 14:48:45 CST 2014 重复次数: -1 次,每隔5 秒
[quartz2.2.1][INFO ] 2014-06-30 14:48:31 -- main ------- 手动触发Scheduler -----------------
[quartz2.2.1][INFO ] 2014-06-30 14:48:31 -- main -------循环10次   每隔7秒中断----------
group1.interruptableJob1---开始中断Mon Jun 30 14:48:38 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:45 -- DefaultQuartzScheduler_Worker-1 ---- group1.interruptableJob1 executing at Mon Jun 30 14:48:45 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:48:45 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:45 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:48:46 -- DefaultQuartzScheduler_Worker-1 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:48:46 -- DefaultQuartzScheduler_Worker-1 ---- group1.interruptableJob1 completed at Mon Jun 30 14:48:46 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:50 -- DefaultQuartzScheduler_Worker-2 ---- group1.interruptableJob1 executing at Mon Jun 30 14:48:50 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:48:52 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:52 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:48:53 -- DefaultQuartzScheduler_Worker-2 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:48:53 -- DefaultQuartzScheduler_Worker-2 ---- group1.interruptableJob1 completed at Mon Jun 30 14:48:53 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:55 -- DefaultQuartzScheduler_Worker-3 ---- group1.interruptableJob1 executing at Mon Jun 30 14:48:55 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:48:59 -- DefaultQuartzScheduler_Worker-3 ---- group1.interruptableJob1 completed at Mon Jun 30 14:48:59 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:48:59 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:00 -- DefaultQuartzScheduler_Worker-4 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:00 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:04 -- DefaultQuartzScheduler_Worker-4 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:04 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:05 -- DefaultQuartzScheduler_Worker-5 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:05 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:06 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:06 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:49:07 -- DefaultQuartzScheduler_Worker-5 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:49:07 -- DefaultQuartzScheduler_Worker-5 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:07 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:10 -- DefaultQuartzScheduler_Worker-6 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:10 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:13 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:13 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:49:14 -- DefaultQuartzScheduler_Worker-6 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:49:14 -- DefaultQuartzScheduler_Worker-6 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:14 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:15 -- DefaultQuartzScheduler_Worker-7 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:15 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:19 -- DefaultQuartzScheduler_Worker-7 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:19 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:20 -- DefaultQuartzScheduler_Worker-8 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:20 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:20 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:20 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:49:21 -- DefaultQuartzScheduler_Worker-8 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:49:21 -- DefaultQuartzScheduler_Worker-8 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:21 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:25 -- DefaultQuartzScheduler_Worker-9 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:25 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:27 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:27 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:49:28 -- DefaultQuartzScheduler_Worker-9 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:49:28 -- DefaultQuartzScheduler_Worker-9 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:28 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:30 -- DefaultQuartzScheduler_Worker-10 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:30 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:34 -- DefaultQuartzScheduler_Worker-10 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:34 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:34 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:35 -- DefaultQuartzScheduler_Worker-1 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:35 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:39 -- DefaultQuartzScheduler_Worker-1 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:39 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:40 -- DefaultQuartzScheduler_Worker-2 ---- group1.interruptableJob1 executing at Mon Jun 30 14:49:40 CST 2014
group1.interruptableJob1---开始中断Mon Jun 30 14:49:41 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:41 -- main ---group1.interruptableJob1  -- INTERRUPTING --
[quartz2.2.1][INFO ] 2014-06-30 14:49:41 -- main ------- Shutting Down 触发器---------------------
[quartz2.2.1][INFO ] 2014-06-30 14:49:42 -- DefaultQuartzScheduler_Worker-2 --- group1.interruptableJob1  -- Interrupted... bailing out!
[quartz2.2.1][INFO ] 2014-06-30 14:49:42 -- DefaultQuartzScheduler_Worker-2 ---- group1.interruptableJob1 completed at Mon Jun 30 14:49:42 CST 2014
[quartz2.2.1][INFO ] 2014-06-30 14:49:42 -- main Executed 12 jobs.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值