日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Quartz-异常处理

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz-异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 示例
  • 示例說明
  • 說明
  • 示例源碼

概述

我們根據官網示例說明Quartz在job執行異常情況時的處理。

參考官方原文:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/examples/Example6.html

本文涉及3個類:
BadJob1.java、
BadJob2.java
一個調度類 JobExceptionExample.java


示例

package com.xgj.quartz.quartzItself.exception;import java.text.SimpleDateFormat; import java.util.Date;import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.PersistJobDataAfterExecution;/*** * * @ClassName: BadJob1* * @Description: setRefireImmediately* * @author: Mr.Yang* * @date: 2017年11月15日 上午1:10:17*/@PersistJobDataAfterExecution @DisallowConcurrentExecution public class BadJob1 implements Job {@Overridepublic void execute(JobExecutionContext context)throws JobExecutionException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");JobKey jobKey = context.getJobDetail().getKey();JobDataMap dataMap = context.getJobDetail().getJobDataMap();int flag = dataMap.getInt("flag");System.out.println("---" + jobKey + ",執行時間:"+ dateFormat.format(new Date()) + ", flag: " + flag);// 由于零錯誤除以此作業將生成的異常的例外(僅在第一次運行)try {int result = 4815 / flag;} catch (Exception e) {System.out.println("--- Job1 出錯!");// 修復分母,所以下次這個作業運行它不會再失敗JobExecutionException e2 = new JobExecutionException(e);dataMap.put("flag", "1");// 這個工作會立即重新啟動e2.setRefireImmediately(true);throw e2;}System.out.println("---" + jobKey + ",完成時間:"+ dateFormat.format(new Date()));}} package com.xgj.quartz.quartzItself.exception;import java.text.SimpleDateFormat; import java.util.Date;import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.PersistJobDataAfterExecution;/*** * * @ClassName: BadJob2* * @Description: setUnscheduleAllTriggers* * @author: Mr.Yang* * @date: 2017年11月15日 上午1:10:24*/@PersistJobDataAfterExecution @DisallowConcurrentExecution public class BadJob2 implements Job {public void execute(JobExecutionContext context)throws JobExecutionException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");JobKey jobKey = context.getJobDetail().getKey();System.out.println("---" + jobKey + " ,執行時間:"+ dateFormat.format(new Date()));try {int result = 4815 / 0;} catch (Exception e) {System.out.println("--- job2 出錯!");// Quartz將自動取消與此作業相關聯的所有觸發器,以使其不再運行JobExecutionException e2 = new JobExecutionException(e);e2.setUnscheduleAllTriggers(true);throw e2;}System.out.println("---" + jobKey + ",完成時間:"+ dateFormat.format(new Date()));}} package com.xgj.quartz.quartzItself.exception;import static org.quartz.DateBuilder.nextGivenSecondDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger;import java.text.SimpleDateFormat; import java.util.Date;import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.SimpleTrigger; import org.quartz.impl.StdSchedulerFactory;/*** * * @ClassName: JobExceptionExample* * @Description: 演示 Quartz 如何處理 從job中拋出的 JobExecutionExceptions* * @author: Mr.Yang* * @date: 2017年11月15日 上午1:10:02*/ public class JobExceptionExample {public void run() throws Exception {// 任務執行的時間 格式化SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();System.out.println("--------------- 初始化 -------------------");// 下一個15秒Date startTime = nextGivenSecondDate(null, 15);// badJob1 每10s執行一次 , 拋出異常,并立即重新執行JobDetail job = newJob(BadJob1.class).withIdentity("badJob1", "group1").usingJobData("flag", "0").build();SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();Date ft = sched.scheduleJob(job, trigger);System.out.println(job.getKey().getName() + " 將在: "+ dateFormat.format(ft) + " 時運行.并且重復: "+ trigger.getRepeatCount() + " 次, 每次間隔 "+ trigger.getRepeatInterval() / 1000 + " 秒");// badJob2 每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);System.out.println(job.getKey().getName() + " 將在: "+ dateFormat.format(ft) + " 時運行.并且重復: "+ trigger.getRepeatCount() + " 次, 每次間隔 "+ trigger.getRepeatInterval() / 1000 + " 秒");sched.start();System.out.println("------- 開始調度 (調用.start()方法) ----------------");try {// 睡眠 30sThread.sleep(60L * 1000L);} catch (Exception e) {}sched.shutdown(false);// 顯示一下 已經執行的任務信息SchedulerMetaData metaData = sched.getMetaData();System.out.println("~~~~~~~~~~ 執行了 "+ metaData.getNumberOfJobsExecuted() + " 個 jobs.");}public static void main(String[] args) throws Exception {JobExceptionExample example = new JobExceptionExample();example.run();} }

運行結果

INFO StdSchedulerFactory - Using default implementation for ThreadExecutor INFO SimpleThreadPool - Job execution threads will use class loader of thread: main INFO SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO QuartzScheduler - Quartz Scheduler v.2.2.3 created. INFO RAMJobStore - RAMJobStore initialized. INFO QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.3) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.INFO StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' INFO StdSchedulerFactory - Quartz scheduler version: 2.2.3 --------------- 初始化 ------------------- badJob1 將在: 2017-11-15 01:14:15 時運行.并且重復: -1, 每次間隔 10 秒 badJob2 將在: 2017-11-15 01:14:15 時運行.并且重復: -1, 每次間隔 5 秒 INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. ------- 開始調度 (調用.start()方法) ---------------- ---group1.badJob1,執行時間:2017-11-15 01:14:15, flag: 0 --- Job1 出錯! ---group1.badJob2 ,執行時間:2017-11-15 01:14:15 --- job2 出錯! INFO JobRunShell - Job group1.badJob1 threw a JobExecutionException: org.quartz.JobExecutionException: java.lang.ArithmeticException: / by zeroat com.xgj.quartz.quartzItself.exception.BadJob1.execute(BadJob1.java:51)at org.quartz.core.JobRunShell.run(JobRunShell.java:202)at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.lang.ArithmeticException: / by zeroat com.xgj.quartz.quartzItself.exception.BadJob1.execute(BadJob1.java:45)... 2 common frames omitted INFO JobRunShell - Job group1.badJob2 threw a JobExecutionException: org.quartz.JobExecutionException: java.lang.ArithmeticException: / by zeroat com.xgj.quartz.quartzItself.exception.BadJob2.execute(BadJob2.java:44)at org.quartz.core.JobRunShell.run(JobRunShell.java:202)at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.lang.ArithmeticException: / by zeroat com.xgj.quartz.quartzItself.exception.BadJob2.execute(BadJob2.java:38)... 2 common frames omitted ---group1.badJob1,執行時間:2017-11-15 01:14:15, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:14:15 ---group1.badJob1,執行時間:2017-11-15 01:14:25, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:14:25 ---group1.badJob1,執行時間:2017-11-15 01:14:35, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:14:35 ---group1.badJob1,執行時間:2017-11-15 01:14:45, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:14:45 ---group1.badJob1,執行時間:2017-11-15 01:14:55, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:14:55 ---group1.badJob1,執行時間:2017-11-15 01:15:05, flag: 1 ---group1.badJob1,完成時間:2017-11-15 01:15:05 INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. ~~~~~~~~~~ 執行了 8 個 jobs.

示例說明

job1:在拋出異常后,然后將flag設置成1,也就是說只有第一次會有異常拋出,以后都正常代碼

setRefireImmediately(true);它設置了 job 類拋出異常后的處理方式,此處意為發生異常后立即重新執行

job2:和job1不同,它沒有判斷,執行一次就拋出一次異常

e2.setUnscheduleAllTriggers(true);設置了去掉它的觸發器,也就意味著 BadJob2 如果發生異常,就沒有機會再執行了

說明

在 job1.java 和 job2.java 中的異常如果不拋出(注釋掉),會有什么結果發生呢?

// throw e2;-- 注釋掉這一行后執行

job1如果不拋出:執行正常,因為在異常處理中有重啟job語句

job2如果不拋出:任務每次都執行,每次都進入異常。相當于后續的任務沒有停止。

示例源碼

代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

總結

以上是生活随笔為你收集整理的Quartz-异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜不卡久久精品无码免费 | 精品人妻无码一区二区 | 污黄啪啪网 | 日本人体视频 | 欧美理伦少妇2做爰 | 国产在线免费视频 | 亚洲第一色在线 | 麻豆免费av | 亚洲综合图区 | 久久亚洲在线 | 日批视频在线播放 | 欧美乱妇在线观看 | 99视频免费| 久久精品综合 | 国产熟妇一区二区三区四区 | 激情丁香网 | 97精品超碰一区二区三区 | av中出在线 | 黄色wwwww | 欧美一区二区三区国产 | 青青青操| www.日韩精品 | 久久一二区 | 国产鲁鲁视频在线观看特色 | 欧洲女女同性videoso | 亚洲精品久久久久久久蜜桃臀 | av在线不卡播放 | 5566色| 911精品国产一区二区在线 | 亚洲一区成人 | 一本一道av| 欧美日韩99 | 河北彩花av在线播放 | 欧美色欧美色 | 在线不卡av电影 | 日韩成人午夜 | 亚洲精选免费 | 中文字幕二区在线观看 | 成人午夜淫片免费观看 | 69久人妻无码精品一区 | 毛片视屏| av午夜激情| 一区视频在线播放 | 欧美囗交做爰视频 | 国产精品色网 | 亚洲色图导航 | 国产馆av | 欧美激情一区二区三级高清视频 | 一区二区三区爱爱 | 久一久久 | 青娱乐av| 娇小tube性极品娇小 | 男生把女生困困的视频 | 日韩欧美精品在线视频 | 国产精品88av | 欧美精品99久久久 | 亚洲欧美日韩精品色xxx | 日本午夜一区二区三区 | 亚洲视频在线网 | 欧美国产高清 | 亚洲免费视频一区二区三区 | 日韩网站在线观看 | 日韩欧美激情在线 | 国产白浆在线观看 | 欧美精品久久天天躁 | 二区三区偷拍浴室洗澡视频 | 国产精品亚洲无码 | 免费看成人片 | 偷拍女澡堂一区二区三区 | 日本人添下边视频免费 | 天天干夜夜想 | 色蜜桃av| 国产麻豆网 | 尤物视频网站在线观看 | 欧美成人三级在线视频 | 伊人网视频在线观看 | 国产成人毛毛毛片 | av资源网址| 91视频美女| 人妻在线一区二区三区 | 九月丁香婷婷 | 无码人妻少妇色欲av一区二区 | 久久久久这里只有精品 | 99精品一区二区三区 | 天天射天天色天天干 | 黄色自拍视频 | 日本欧美韩国国产精品 | 国产喷潮 | 午夜视频免费在线 | 欧美丰满老妇熟乱xxxxyyy | 久久国产精品免费观看 | 日本三级小视频 | 欧美黑人一区 | 美女精品久久久 | 成人性生交生交视频 | 国产三级视频 | 中文字幕国产视频 | 色人天堂| 亚洲人体视频 |