quartz 2.2.3 自带示例源码解读example6~example10
来源:互联网 发布:android 网络编程 pdf 编辑:程序博客网 时间:2024/06/10 16:39
example6 任务的异常处理
@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class BadJob1 implements Job {private static Logger _log = LoggerFactory.getLogger(BadJob1.class);private int calculation;public BadJob1() {}// 此任务会抛出异常public void execute(JobExecutionContext context)throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();JobDataMap dataMap = context.getJobDetail().getJobDataMap();int denominator = dataMap.getInt("denominator");_log.info("---" + jobKey + " executing at " + new Date()+ " with denominator " + denominator);// 此任务因为除以0所以抛出异常,只有第1次才会抛出书异常try {calculation = 4815 / denominator;} catch (Exception e) {_log.info("--- Error in job!");JobExecutionException e2 = new JobExecutionException(e);// 放job的map中放入分母,所以下次不会抛出异常dataMap.put("denominator", "1");// 抛出异常时直接再次触发任务e2.setRefireImmediately(true); throw e2;}_log.info("---" + jobKey + " completed at " + new Date());}}@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class BadJob2 implements Job { private static Logger _log = LoggerFactory.getLogger(BadJob2.class); private int calculation; public BadJob2() { } // 此任务会抛出异常 public void execute(JobExecutionContext context) throws JobExecutionException { JobKey jobKey = context.getJobDetail().getKey(); _log.info("---" + jobKey + " executing at " + new Date()); // 此任务因为除以0所以抛出异常 try { int zero = 0; calculation = 4815 / zero; } catch (Exception e) { _log.info("--- Error in job!"); JobExecutionException e2 = new JobExecutionException(e); // quartz将会取消此任务上的触发器,所以此任务不会再执行 e2.setUnscheduleAllTriggers(true); throw e2; } _log.info("---" + jobKey + " completed at " + new Date()); }}public class JobExceptionExample {public void run() throws Exception {Logger log = LoggerFactory.getLogger(JobExceptionExample.class);log.info("------- Initializing ----------------------");SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();log.info("------- Initialization Complete ------------");log.info("------- Scheduling Jobs -------------------");// 开始时间秒数为15的位数Date startTime = nextGivenSecondDate(null, 15);// badJob1 will run every 10 seconds// this job will throw an exception and refire// immediately// job1每10秒运行一次,由于抛出异常,所以会立即再次触发JobDetail job = newJob(BadJob1.class).withIdentity("badJob1", "group1").usingJobData("denominator", "0").build();SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();Date ft = sched.scheduleJob(job, trigger);log.info(job.getKey() + " will run at: " + ft + " and repeat: "+ trigger.getRepeatCount() + " times, every "+ trigger.getRepeatInterval() / 1000 + " seconds");// job2每5秒执行一次,此任务抛出异常后不会再次执行了job = newJob(BadJob2.class).withIdentity("badJob2", "group1").build();trigger = newTrigger().withIdentity("trigger2", "group1").startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();ft = sched.scheduleJob(job, trigger);log.info(job.getKey() + " will run at: " + ft + " and repeat: "+ trigger.getRepeatCount() + " times, every "+ trigger.getRepeatInterval() / 1000 + " seconds");log.info("------- Starting Scheduler ----------------");sched.start();log.info("------- Started Scheduler -----------------");try {Thread.sleep(30L * 1000L);} catch (Exception e) {}log.info("------- Shutting Down ---------------------");sched.shutdown(false);log.info("------- Shutdown Complete -----------------");SchedulerMetaData metaData = sched.getMetaData();log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");}public static void main(String[] args) throws Exception {JobExceptionExample example = new JobExceptionExample();example.run();}}
example7 中断任务
public class DumbInterruptableJob implements InterruptableJob {private static Logger _log = LoggerFactory.getLogger(DumbInterruptableJob.class);private boolean _interrupted = false;private JobKey _jobKey = null;public DumbInterruptableJob() {}public void execute(JobExecutionContext context)throws JobExecutionException {_jobKey = context.getJobDetail().getKey();_log.info("---- " + _jobKey + " executing at " + new Date());try {// 通过睡眠模拟任务所花费的时间for (int i = 0; i < 4; i++) {try {Thread.sleep(1000L);} catch (Exception ignore) {ignore.printStackTrace();}// 检查任务是否被中断if (_interrupted) {_log.info("--- " + _jobKey+ " -- Interrupted... bailing out!");// 对于特殊的场景我们可以选择抛出一个JobExecutionException异常return;}}} finally {_log.info("---- " + _jobKey + " completed at " + new Date());}}// 中断任务时的回调函数public void interrupt() throws UnableToInterruptJobException {_log.info("---" + _jobKey + " -- INTERRUPTING --");_interrupted = true;}}public class InterruptExample {public void run() throws Exception {final Logger log = LoggerFactory.getLogger(InterruptExample.class);log.info("------- Initializing ----------------------");SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();log.info("------- Initialization Complete -----------");log.info("------- Scheduling Jobs -------------------");// 开始时间秒数为15的倍数Date startTime = nextGivenSecondDate(null, 15);// 每5秒执行一次JobDetail job = newJob(DumbInterruptableJob.class).withIdentity("interruptableJob1", "group1").build();SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();Date ft = sched.scheduleJob(job, trigger);log.info(job.getKey() + " will run at: " + ft + " and repeat: "+ trigger.getRepeatCount() + " times, every "+ trigger.getRepeatInterval() / 1000 + " seconds");sched.start();log.info("------- Started Scheduler -----------------");log.info("------- Starting loop to interrupt job every 7 seconds ----------");for (int i = 0; i < 50; i++) {try {Thread.sleep(7000L);sched.interrupt(job.getKey()); // 中断任务} catch (Exception e) {}}log.info("------- Shutting Down ---------------------");sched.shutdown(true);log.info("------- Shutdown Complete -----------------");SchedulerMetaData metaData = sched.getMetaData();log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");}public static void main(String[] args) throws Exception {InterruptExample example = new InterruptExample();example.run();}}
Example 8 Calendar使用
使用Calendar可以排除指定日期,由于没有测试通过,所以就不粘贴这部分示例代码了
Example9 任务监听器
public class SimpleJob1 implements Job {private static Logger _log = LoggerFactory.getLogger(SimpleJob1.class);public SimpleJob1() {}public void execute(JobExecutionContext context)throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();_log.info("SimpleJob1 says: " + jobKey + " executing at " + new Date());}}public class SimpleJob2 implements Job {private static Logger _log = LoggerFactory.getLogger(SimpleJob2.class);public SimpleJob2() {}public void execute(JobExecutionContext context)throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();_log.info("SimpleJob2 says: " + jobKey + " executing at " + new Date());}}public class Job1Listener implements JobListener { private static Logger _log = LoggerFactory.getLogger(Job1Listener.class); public String getName() { return "job1_to_job2"; } public void jobToBeExecuted(JobExecutionContext inContext) { _log.info("Job1Listener says: Job Is about to be executed."); } public void jobExecutionVetoed(JobExecutionContext inContext) { _log.info("Job1Listener says: Job Execution was vetoed."); } public void jobWasExecuted(JobExecutionContext inContext, JobExecutionException inException) { _log.info("Job1Listener says: Job was executed."); // Simple job #2 JobDetail job2 = newJob(SimpleJob2.class).withIdentity("job2").build(); Trigger trigger = newTrigger().withIdentity("job2Trigger").startNow().build(); try { inContext.getScheduler().scheduleJob(job2, trigger); } catch (SchedulerException e) { _log.warn("Unable to schedule job2!"); e.printStackTrace(); } }}public class ListenerExample { public void run() throws Exception { Logger log = LoggerFactory.getLogger(ListenerExample.class); log.info("------- Initializing ----------------------"); SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); log.info("------- Initialization Complete -----------"); log.info("------- Scheduling Jobs -------------------"); JobDetail job = newJob(SimpleJob1.class).withIdentity("job1").build(); Trigger trigger = newTrigger().withIdentity("trigger1").startNow().build(); // 设置监听器 JobListener listener = new Job1Listener(); Matcher<JobKey> matcher = KeyMatcher.keyEquals(job.getKey()); sched.getListenerManager().addJobListener(listener, matcher); sched.scheduleJob(job, trigger); log.info("------- Starting Scheduler ----------------"); sched.start(); log.info("------- Waiting 30 seconds... --------------"); try { Thread.sleep(30L * 1000L); } catch (Exception e) { } log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData(); log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { ListenerExample example = new ListenerExample(); example.run(); }}
Example10 使用插件
从xml中读取任务配置并运行任务,由于实际中没用到,。。。
0 0
- quartz 2.2.3 自带示例源码解读example6~example10
- quartz 2.2.3 自带示例源码解读example1~example5
- CloudSim 自带示例错误:
- hadoop自带示例wordcount
- quartz-2.2.3源码分析
- OpenCV自带的CamShift算法解读
- Android 源码工程中自带的demo(示例程序)
- Android 源码工程中自带的demo(示例程序)
- 关于Spirng Quartz定时触发器+源码示例!
- Quartz源码分析之HelloWorld示例
- 源码自带项目说明
- 基于maven发送邮件系列(3)---maven自带的quartz实现定时发送邮件
- jquery find()解析示例及源码解读
- thinkphp 分页类源码详细解读(带实例解读)
- Gtk/Glade自带的示例代码
- SAP系统自带的示例程序
- VS2008中自带的示例
- SAP系统自带的示例程序
- 接口测试之上传文件
- H5 选项卡—三级菜单联动
- Linux下Wget获取云盘资源
- 我看小程序:连接一切的背后,是打群架时代的开始
- ALG:应用层网关(防火墙)
- quartz 2.2.3 自带示例源码解读example6~example10
- linux mysql-bin.000001占用磁盘空间过大解决方法
- 学习《第一行代码》之实战项目-天气预报API实例
- wpf之一:基础概念
- android 切换到阿拉伯语电话号码+号显示在右侧及顺序错乱的处理
- Minimax算法及实例分析
- 卷积层和池化层的参数
- 我的前20年生活经历(刚入程序员前)
- Java SAX 解析 XML