`

quartz的中断恢复处理

    博客分类:
  • J2EE
阅读更多
使用jobstore来处理程序中断后的恢复
先看下几个处理时间点上的表状态

生成任务时会往job_details和triggers表插数据(这两个表关联的其它详细表就不多说了)
如果job还没开始执行时程序就中断了,
下次程序启动时会判断当前时间-预计执行时间是否小于misfireThreshold,是则正常执行,否则不执行了

如果是执行过程中中断呢?
job执行中时会往fired_triggers表插数据
如果这时程序中断,而job又设置了RequestsRecovery为true,则该job会被重新执行(不受misfireThreshold影响,因为根本就不是misfire)。
可以通过JobExecutionContext.isRecovering()来判断是否是recover,因为很多时候恢复的任务要先做一些清理工作。
如果RequestsRecovery为false,则不会恢复执行。

另外还有一点要注意,如果job设置了listener,则在jobWasExecuted执行完成后,任务相关的信息才会被从数据库里删除,表示真正执行完成。
如果job的execute执行完了,但在listener的jobWasExecuted()里程序出错或中断的话,quartz记录的任务状态还是运行中,下次任务还是会被恢复(RequestsRecovery=true)。
0
1
分享到:
评论
5 楼 kanbol 2012-11-26  
2110901055 写道
kanbol 写道
2110901055 写道
您好,如果我是数据库服务异常中断了一些任务,程序还在跑,当数据库服务正常后,又超过了设置的 misfireThreshold时间,那任务还会不会继续执行呢?如果不执行了那怎么处理让任务继续执行?谢谢!

如果程序正常,那job是正常执行完成(正常结束或异常结束)。
既然结束了,那就和misfireThreshold没关系了。
另外单独重新启动job吧

谢谢您的回答,重新调度这个JOB是一个方法,但是我发现我的数据服务正常后,显然超过了misfireThreshold设置时间,我没有设置RequestsRecovery属性,但任务还是可以正常运行,对于这quartz的业务流程不是很清楚,楼主怎么理解,是否可以给我详解下,谢谢。


就算数据库出问题了,但如果你job代码里对exception做了处理,没有导致job出错,那job运行状态就是正常的,和recovery、misfire就没关系。
比如数据库连接不上会一直重试
4 楼 2110901055 2012-11-25  
kanbol 写道
2110901055 写道
您好,如果我是数据库服务异常中断了一些任务,程序还在跑,当数据库服务正常后,又超过了设置的 misfireThreshold时间,那任务还会不会继续执行呢?如果不执行了那怎么处理让任务继续执行?谢谢!

如果程序正常,那job是正常执行完成(正常结束或异常结束)。
既然结束了,那就和misfireThreshold没关系了。
另外单独重新启动job吧

谢谢您的回答,重新调度这个JOB是一个方法,但是我发现我的数据服务正常后,显然超过了misfireThreshold设置时间,我没有设置RequestsRecovery属性,但任务还是可以正常运行,对于这quartz的业务流程不是很清楚,楼主怎么理解,是否可以给我详解下,谢谢。
3 楼 kanbol 2012-11-24  
2110901055 写道
您好,如果我是数据库服务异常中断了一些任务,程序还在跑,当数据库服务正常后,又超过了设置的 misfireThreshold时间,那任务还会不会继续执行呢?如果不执行了那怎么处理让任务继续执行?谢谢!

如果程序正常,那job是正常执行完成(正常结束或异常结束)。
既然结束了,那就和misfireThreshold没关系了。
另外单独重新启动job吧
2 楼 2110901055 2012-11-19  
您好,如果我是数据库服务异常中断了一些任务,程序还在跑,当数据库服务正常后,又超过了设置的 misfireThreshold时间,那任务还会不会继续执行呢?如果不执行了那怎么处理让任务继续执行?谢谢!
1 楼 yangtao309 2011-08-30  
哈哈......
quartz要好好学习了

相关推荐

    Quartz调度、终止执行的任务

    关于终止执行的任务,Quartz提供了`scheduler.pauseJob()`和`scheduler.resumeJob()`方法来暂停和恢复Job。如果你想要终止某个任务,你可以调用`scheduler.deleteJob()`来移除Job实例,使其不再执行。例如: ```...

    QuartzDemo及iis闲置时间解决方案

    6. **优化Quartz.NET配置**:确保Quartz.NET配置文件(通常是quartz.config)中的设置适合你的需求,例如,设置适当的线程池大小,以便在多并发任务时能有效处理。 总结起来,Quartz和IIS结合使用时,可能会遇到IIS...

    Quartz开发指南.pdf

    - 可以通过 Job 的 Interrupt 方法来尝试中断任务,但这取决于任务本身的实现是否支持中断。 10. **如何串行执行任务?** - 通过设置 Trigger 的 Group 和 Name 来确保同一组内的任务按照顺序执行。 11. **为...

    quartz任务调试

    这在同步MySQL数据时特别有用,因为你可以确保即使服务短暂中断,任务也会在恢复后继续。 对于MySQL数据同步,通常会涉及到以下几个步骤: 1. **连接数据库**:使用JDBC或ORM框架(如Hibernate)建立与MySQL的连接...

    quartz-2.1.7.gz

    3. **集群支持**:Quartz支持多节点集群,当一个节点宕机时,任务调度不会中断,其他节点可以接管。 4. **监听器**:提供JobListener和TriggerListener,可以监控Job和Trigger的生命周期事件,例如在Job执行前后...

    springquartz源码

    - **JobExecutionException**:Job执行时抛出的异常会被捕获并处理,可以控制任务的中断或重试。 - **Job持久化**:当应用重启时,通过JobStore可以恢复之前的Job和Trigger状态,继续执行未完成的任务。 7. **...

    Getting_Started_with_Quartz_Scheduler.pdf Version 2.2.1

    如果系统突然崩溃或重启,Quartz Scheduler可以通过持久化机制恢复未完成的作业,确保业务流程不会中断。 #### 监控和管理 Quartz Scheduler提供了丰富的监控工具和管理接口,使得管理员能够实时查看作业的状态、...

    Quartz持久化参考资料大全

    Quartz持久化的主要目的是在系统重启或故障后,能够恢复已有的调度信息,避免任务丢失。它通过JobStore接口实现,目前支持多种存储方式,如JDBCJobStore(基于关系型数据库)、RAMJobStore(内存存储)和...

    采用Spring整合activeMQ与quartz的JMS数据同步实例

    这个方案尤其适用于大型分布式系统,它能够确保即使在系统组件之间出现短暂的网络中断或故障时,数据也能得到可靠的传输和处理。 首先,让我们深入了解每个组件: **ActiveMQ**:ActiveMQ是Apache软件基金会开发的...

    关于quartz的快速上手手册

    - 为了实现容错和恢复,可以设置 JobDetail 的 "request recovery" 标志为 true,这样在集群环境中,如果 Job 在执行过程中因故障中断,Quartz 会在其他节点上重新调度执行。 总结来说,Quartz 提供了一个强大而...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:Job 的易失性、持久性和可恢复性,如何从 Scheduler 中移除、中断 Job。Quartz 已为我们提供了哪些 Job。最后是 Java 线程的简单介绍。 第四章. 部署 Job (第四部分) 内容提要:线程在 Quartz 中的用法,...

    Quartz开发指南

    Quartz支持事务处理,特别是通过`JobStoreCMT`(`JDBCJobStore`的子类)参与JTA事务。此外,Quartz还可以管理JTA事务的开始和提交。 #### 七、集群支持 - **容错**:在集群模式下,Quartz支持容错机制,确保即使...

    Quartz API

    - 考虑使用JobStateful接口,以便在Job被中断时能保存和恢复状态。 - 对于长时间运行的任务,考虑使用Future或ExecutorService来异步执行,以免影响Scheduler性能。 以上是对Quartz API的详细概述,它为Java开发...

    jfinal_demo.rar

    因此,需要对Job的`execute`方法进行适当的异常处理,避免因异常导致任务中断。 6. **日志记录**:为了监控任务执行情况,可以添加日志记录,记录任务的开始、结束、异常等信息,方便后期排查问题。 通过以上步骤...

    QuartzScheduler:JEE中的石英

    在JEE环境中,Quartz可以与EJB(Enterprise JavaBeans)、Servlet、JMS(Java Message Service)等组件集成,提供服务器级别的定时任务处理。这使得Quartz成为了构建可扩展和高可用性的企业级应用的理想选择。 1. *...

    JAVA实例Job myEplice

    7. **异常处理**:在Job的execute方法中,应该正确处理可能出现的异常,以防止任务中断。Quartz或Spring提供了相应的机制来捕获和处理这些异常。 8. **持久化**:为了应对应用重启或服务器故障,Quartz支持将Job和...

    spring-batch-reference.rar_SpringBatch英文读物pdf_batch

    8. **作业重启和恢复(Job Restart and Recovery)**:如果作业因某种原因中断,Spring Batch 支持在稍后的时间点重新启动,从上次失败的地方继续执行,避免重复已完成的工作。 9. **作业调度(Job Scheduling)**...

    飞鸽源码分析,刚刚传出来的

    3. 错误处理和恢复:源码中应该包含了错误处理和重试机制,以应对网络不稳定、服务中断等情况。 4. 性能监控:飞鸽可能有内置的性能监控和日志记录,以便于开发者分析系统运行状态。 对于初学者和有经验的开发者来...

    java scheduler 定时demo

    8. **异常处理**: 定时任务可能需要处理执行过程中出现的异常,避免任务因错误而中断。这可以通过自定义异常处理器或在任务方法中捕获异常来实现。 9. **扩展性与可靠性**: 高性能的定时系统需要考虑任务的扩展性和...

    Spring Job开发包

    考虑到定时任务可能会抛出异常,确保在方法中加入适当的异常处理逻辑,或者使用全局的异常处理器捕获并处理这些异常,以避免任务因异常而中断。 通过理解和熟练运用以上知识点,你可以利用Spring Job开发包高效地...

Global site tag (gtag.js) - Google Analytics