博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz 2 定时任务(三):异常与中断处理
阅读量:6256 次
发布时间:2019-06-22

本文共 1517 字,大约阅读时间需要 5 分钟。

版权声明:本文由吴仙杰创作整理,转载请注明出处:

1. 作业异常

org.quartz.JobExecutionException 会在 Scheduler(调度器)运行错误时,由 job(作业)实现类抛出。

1.1 捕获并解决异常,立即重新执行作业

在我们捕获异常并解决异常后,可以调用 JobExecutionException#setRefireImmediately(true) 立即重新执行作业。

假设我们有一个会抛出异常的 job 实现类,job 实现类的代码片断如下:

try {    // 一个异常例子,假设第一次传入的 denominator 为 0,那么将会抛出异常    calculation = 4815 / denominator;} catch (Exception e) {    JobExecutionException e2 = new JobExecutionException(e);    // 在第一次异常后,修改 denominator 参数为 1,那么后面的执行就不会出错了    dataMap.put("denominator", "1");    // true 表示立即重新执行作业    e2.setRefireImmediately(true);    throw e2;}

上面的作业会在第一次执行时抛出 java.lang.ArithmeticException: / by zero 异常后,马上又会执行一次,之后都可以正常执行作业。

注意: 为了共享在同一个 JobDetail 中的 JobDataMap,我们需要在上面这个 job 实现类上加入 @PersistJobDataAfterExecution@DisallowConcurrentExecution 注解,详见 。

1.2 捕获异常,取消所有触发器

在我们捕获异常时,可以调用 JobExecutionException#setUnscheduleAllTriggers(true) 取消所有与这个作业有关的触发器。

假设我们有一个会抛出异常的 job 实现类,job 实现类的代码片断如下:

try {    // 一个异常例子    int zero = 0;    calculation = 4815 / zero;} catch (Exception e) {    JobExecutionException e2 = new JobExecutionException(e);    // true 表示 Quartz 会自动取消所有与这个 job 有关的 trigger,从而避免再次运行 job    e2.setUnscheduleAllTriggers(true);    throw e2;}

上面的作业会在抛出异常后,就不再执行任何有关该作业的触发器了。

2. 作业中断

org.quartz.InterruptableJob 接口提供了一种中断机制,这个接口只有一个方法 interrupt(),这个方法会在用户发出中断请求到 Scheduler(调度器)时触发(即调用 Scheduler#interrupt(JobDetail#getKey()) 方法时触发)。

其中 InterruptableJob 接口又继承了 Job 接口,所以当我们使用时,只需要实现 InterruptableJob 接口,重写其中的 executeinterrupt 方法即可。

3. 参考

PS:本文针对的 Quartz 版本为 Quartz 2.2.3。官方下载地址:

你可能感兴趣的文章
LaTeX技巧005:定制自己炫酷的章节样式实例
查看>>
LeetCode解题思路:27. Remove Element
查看>>
CCF NOI1138 高精度加法
查看>>
构造函数私有方法和公有方法
查看>>
JS原型与原型链终极详解
查看>>
win7 下配置Openssl
查看>>
Android中Handler的使用方法——在子线程中更新界面
查看>>
1_NAT模式和桥接模式下的网络配置
查看>>
netcore webapi帮助文档设置
查看>>
springcloud~配置中心的使用
查看>>
EF架构~为EF DbContext生成的实体添加注释(T5模板应用)
查看>>
认识flask框架
查看>>
7. 类的继承
查看>>
npm
查看>>
【转】VLAN原理详解
查看>>
django和apache交互的wsgi分析
查看>>
python --- json模块和pickle模块详解
查看>>
说说一道实在很多陷阱的题
查看>>
EM算法
查看>>
jzoj p1306 河流
查看>>