`
newObject
  • 浏览: 23821 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

quartz中怎样处理Job并行的情况

阅读更多
在 Quartz 中,Job 是一个接口,企业应用需要实现这个接口以定义自己的任务。基本来说,任务分为有状态和无状态两种。实现 Job 接口的任务缺省为无状态的。Quartz 中还有另外一个接口 StatefulJob。实现 StatefulJob 接口的任务为有状态的,上一节的简单实例中,我们定义的 SampleJob 就是实现了 StatefulJob 接口的有状态任务。下图列出了 Quartz 中 Job 接口的定义以及一些自带的实现类:
无状态任务一般指可以并发的任务,即任务之间是独立的,不会互相干扰。例如我们定义一个 trigger,每 2 分钟执行一次,但是某些情况下一个任务可能需要 3 分钟才能执行完,这样,在上一个任务还处在执行状态时,下一次触发时间已经到了。对于无状态任务,只要触发时间到了就会被执行,因为几个相同任务可以并发执行。但是对有状态任务来说,是不能并发执行的,同一时间只能有一个任务在执行。
在笔者项目中,某些任务需要对数据库中的数据进行增删改处理。这些任务不能并发执行,否则会造成数据混乱。因此我们使用 StatefulJob 接口。现在回到上面的例子,任务每 2 分钟执行一次,若某次任务执行了 5 分钟才完成,Quartz 会怎么处理呢?按照 trigger 的规则,第 2 分钟和第 4 分钟分别会有一次预定的触发执行,但是由于是有状态任务,因此实际不会被触发。在第 5 分钟第一次任务执行完毕时,Quartz 会把第 2 和第 4 分钟的两次触发作为 misfired job 进行处理。对于 misfired job,Quartz 会查看其 misfire 策略是如何设定的,如果是立刻执行,则会马上启动一次执行,如果是等待下次执行,则会忽略错过的任务,而等待下次(即第 6 分钟)触发执行。

也可以加上
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
分享到:
评论

相关推荐

    定时任务quartz实现分组串行并行动态配置

    4. **并行执行**:默认情况下,Quartz允许多个Job并行执行,只要它们不在同一组或满足并行执行的条件。如果需要限制同一组内的并行执行,可以通过设置Scheduler的属性`org.quartz.threadPool.class`为`org.quartz....

    Quartz Job Scheduling Framework 中文版

    8. **错误处理与恢复**: 当Job执行过程中出现异常时,Quartz提供了错误处理机制,如设置Job的恢复策略,决定是否重新执行或跳过。 9. **JobStateListener和TriggerListener**: 这些监听器接口允许你在Job执行前、...

    Quartz Job 中文文档 CHM格式

    此外,框架还支持并发执行和任务依赖性,可以在多个线程或服务器上并行处理Job,确保高可用性和可扩展性。 在Quartz Job的配置中,你可能需要设置数据源(DataSource)来存储Job和Trigger的状态,通常使用RDBMS如...

    Quartz如何实现判断某个任务是否正在运行,在项目中用到的,已经测试过了

    6. 考虑并发执行:Quartz允许同一个Job并行执行,所以即使`getCurrentlyExecutingJobs()`返回结果,也不能完全排除任务正被执行的可能性。若需要确保任务不并发执行,可以使用`@DisallowConcurrentExecution`注解...

    Quartz_Job_Scheduling_Framework_V0.9.5

    同时,Quartz还支持Job的并行执行和并发控制,可以根据需求调整线程池大小,优化资源利用。 总的来说,Quartz_Job_Scheduling_Framework_V0.9.5是企业级应用理想的定时任务解决方案,它具有高度可定制性、稳定性和...

    spring+quartz demo

    在 Job 执行过程中如果出现异常,可以通过 `JobExecutionException` 进行捕获和处理,避免影响 Quartz 的正常调度。 9. **线程池设置**: 考虑到并发执行,可以在配置中定制线程池大小,确保多个任务能并行执行。...

    quartz 1.8.6 API 文档

    1. **Job**:在Quartz中,一个Job代表一个具体的任务,它需要实现`org.quartz.Job`接口。Job不直接处理调度,而是负责执行实际的工作。你可以定义自己的Job类,包含要执行的任务逻辑。 2. **Trigger**:Trigger是...

    Quartz Job Scheduling Framework第11章翻译初稿

    在翻译初稿中,你将了解到Quartz的具体使用方法,包括创建Job、Trigger、Scheduler的示例代码,以及如何在项目中配置和启动Quartz。通过阅读《Quartz Job Scheduling Framework第11章》的文档,你将掌握如何利用这个...

    quartz-1.8.4 定时调度

    - 分组与并行性:可以将Job分组管理,同时支持多个实例并行执行,提高任务处理效率。 4. **Quartz的监控与管理**: - Quartz提供了Web管理界面(如`QuartzAdmin`),方便用户查看、暂停、恢复或删除Job和Trigger...

    Quartz.net

    默认情况下,Quartz.NET使用内存存储,但在生产环境中,推荐使用数据库或其他持久化存储方案,以确保高可用性和容错性。 5. **插件与扩展**: Quartz.NET拥有丰富的插件系统,可以增强其功能。例如,Log插件可以将...

    Quartz注入Spring的Bean

    4. **异常处理**:在Job执行过程中,捕获并适当地处理可能出现的异常,以免影响Quartz的正常调度。 通过以上方式,Quartz和Spring的集成使得我们能够充分利用Spring的管理能力,创建出既灵活又健壮的定时任务系统。...

    定时任务quartz及教程

    1. 作业(Job):在Quartz中,作业是需要执行的任务的抽象,它是一个实现了`org.quartz.Job`接口的类。你可以自定义作业类来实现具体业务逻辑。 2. 触发器(Trigger):触发器定义了何时执行作业。有多种类型的...

    Quartz多线程示例.rar

    Quartz是一款功能强大的开源作业调度框架,常用于Java应用程序中,以执行定时任务。它提供了丰富的API和灵活性,使得...通过这个示例,你可以深入理解Quartz的内部工作原理,提升你在Java应用中处理定时任务的能力。

    quartz-1.5.2

    4. **并发与线程管理**:Quartz使用线程池来处理并发任务,可以根据需求调整线程池大小,以应对多任务并行执行的情况。这在高负载环境下非常重要,能够有效利用系统资源。 5. **插件支持**:Quartz 1.5.2虽然没有...

    quartz.rar

    7. **多线程支持**:Quartz 是多线程的,能够并行处理多个任务,提高应用程序的并发性能。 8. **错误处理**:Quartz 支持异常处理机制,当任务执行过程中出现错误,可以设定回调函数进行错误处理。 9. **可扩展性*...

    任务调度开源框架Quartz

    Quartz是一款广泛应用于Java环境中的开源任务调度框架,它提供了高度可配置的作业调度系统,使得开发者能够轻松地在应用程序中实现定时任务的管理。Quartz的核心特性包括但不限于以下几点: 1. **灵活的调度**:...

    quartz由浅入深共21页.pdf.zip

    同时,Quartz还支持Job的并行执行和优先级设置,以及Job之间的依赖关系。 在学习Quartz的过程中,你可能会接触到的概念还包括: - JobDataMap:用于在Job执行时传递参数,可以在JobDetail中定义,然后在Job的...

    quartz-2.2.0.jar.zip

    1. **作业与触发器**:在Quartz中,任务被称为“作业”(Job),而调度时间被称为“触发器”(Trigger)。开发人员可以定义自定义的作业类,这些类实现了`org.quartz.Job`接口,以实现实际的业务逻辑。触发器则定义了...

Global site tag (gtag.js) - Google Analytics