`

[转载]关于Quartz 线程处理说明

 
阅读更多

Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。
1.在Spring中这时需要设置concurrent的值为false, 禁止并发执行。

1
 <property name="concurrent" value="true" />

2.当不使用spring的时候就需要在Job的实现类上加@DisallowConcurrentExecution的注释
@DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail, 这个注解是加在Job类上的, 但意思并不是不能同时执行多个Job, 而是不能并发执行同一个Job Definition(由JobDetail定义), 但是可以同时执行多个不同的JobDetail, 举例说明,我们有一个Job类,叫做SayHelloJob, 并在这个Job上加了这个注解, 然后在这个Job上定义了很多个JobDetail, 如sayHelloToJoeJobDetail, sayHelloToMikeJobDetail, 那么当scheduler启动时, 不会并发执行多个sayHelloToJoeJobDetail或者sayHelloToMikeJobDetail, 但可以同时执行sayHelloToJoeJobDetail跟sayHelloToMikeJobDetail

@PersistJobDataAfterExecution 同样, 也是加在Job上,表示当正常执行完Job后, JobDataMap中的数据应该被改动, 以被下一次调用时用。当使用@PersistJobDataAfterExecution 注解时, 为了避免并发时, 存储数据造成混乱, 强烈建议把@DisallowConcurrentExecution注解也加上。

 

 

@DisallowConcurrentExecution

此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔 [Interval(5秒)],那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。否则的话会等待任务执行完毕以后 再重新执行!(这样会导致任务的执行不是按照我们预先定义的时间间隔执行)

测试代码,这是官方提供的例子。设定的时间间隔为3秒,但job执行时间是5秒,设置@DisallowConcurrentExecution以后程序会等任务执行完毕以后再去执行,否则会在3秒时再启用新的线程执行

@PersistJobDataAfterExecution

此标记说明在执行完Job的execution方法后保存JobDataMap当中固定数据,在默认情况下 也就是没有设置 @PersistJobDataAfterExecution的时候 每个job都拥有独立JobDataMap

否则改任务在重复执行的时候具有相同的JobDataMap

原文链接 :http://www.open-open.com/lib/view/open1412993886655.html

分享到:
评论

相关推荐

    Quartz多线程示例.rar

    在"Quartz多线程示例.rar"这个压缩包中,我们很显然会看到一个关于如何利用Quartz在多线程环境下运行任务的实例。 首先,`StdSchedulerFactory`是Quartz中的调度器工厂类,它是创建`Scheduler`对象的主要方式。`...

    quartz线程管理共7页.pdf.zip

    这个压缩包"quartz线程管理共7页.pdf.zip"很可能包含了一篇关于Quartz线程管理的详细文档,虽然具体的文件名不完整,但我们可以推测其内容可能涵盖了Quartz的核心概念和线程管理相关的技术点。 Quartz的核心概念...

    quartz线程工程实例

    总结来说,"quartz线程工程实例"是一个关于如何在Java项目中使用Quartz框架来实现任务调度的实例,涵盖了从创建Scheduler、定义Job、设计Trigger,到Spring集成Quartz、动态调度、线程控制和持久化等一系列关键知识...

    Quartz开发使用说明文档

    Quartz集群调度的优势在于可以水平扩展、提高系统的处理能力和可靠性。 平台集成 Quartz支持多种平台的集成,包括Spring、 Hibernate、JDBC等。Quartz可以与Spring框架集成,以便使用Spring的依赖注入和AOP功能。...

    quartz.net说明文档

    2. **配置**:可以通过`quartz.properties`文件或者应用程序配置文件进行配置,比如设置调度器实例名、线程池类型、线程数量、优先级以及作业存储类型等。 3. **定义作业和触发器**:创建自定义的作业类,继承自`...

    Java 项目中使用单线程 实现 Quartz-2.2.1 触发优先级 源码下载

    用一个工作线程创建一个调度程序; 安排三个不同优先级的触发器,第一次同时触发,第二次以错开的时间间隔触发; 启动Quartz Scheduler; 等待30秒让 Job 有机会触发触发器; 关闭调度程序;

    Quartz CronTrigger配置说明

    ### Quartz CronTrigger配置详解 #### 一、CronTrigger简介 CronTrigger 是 Quartz 调度器中一种非常强大的任务触发机制,它基于类似于 Unix cron 的表达式来定义任务的执行时间。CronTrigger 表达式由七个或八个...

    C# winform windows版本的进程监控,基于多线程Quartz实现,每10秒监测一次

    C# winform windows版本的进程监控,基于多线程Quartz实现,每10秒监测一次。 1.进程监控每10秒监测一次。 2.红色表示 对其监控,但是未运行 3.灰色表示未启用对当前进程的监控 4.白色表示正常运行的进程信息

    windows版本的进程监控,C#基于多线程Quartz实现,每10秒监测一次.zip

    5. 为了确保程序退出时能够正确关闭调度器,通常会在应用程序的生命周期事件中处理Scheduler的停止。 在项目文件"process-monitor-developer"中,可能包含了以下内容: - 源代码文件:C#源代码文件,包含Job类的...

    Quartz调度、终止执行的任务

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

    spring和quartz的集成(java线程的方式运行)

    这个是spring 和 quartz的集成,quartz是单独的包,java线程的方式运行,利用自定义Jobfactory来解决spring注入service空指针的问题,简单实例执行main方法即可,很实用

    Quartz定时任务处理案例基于jsp

    这是一个完整的使用Quartz定时处理案例,虽然简单,但是一个可运行的案例项目,包括了Quartz的包,及配置文件quartz.properties和quartz_jobs.xml文件的配置方法,及在web.xml文件中配置Quartz等方法。看了这个例子...

    Quartz 线程池

    - **ThreadNamePrefix**:线程名称的前缀,方便识别执行 Quartz 任务的线程。 ### 四、Quartz 线程池的优化 1. **合理设置线程池大小**:根据应用的并发需求和服务器资源,调整线程池大小,避免过度消耗系统资源或...

    Quartz的使用说明.doc

    以下是 Quartz 的关键组件、接口和使用方法的详细说明: 1. **Job 接口**: Job 接口是所有定时任务的基础,你需要自定义类去实现这个接口,并重写 `execute(JobExecutionContext arg0)` 方法。`execute()` 方法是...

    Quartz.NET-2.0

    Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz.NET怎样能并发运行多个作业的原理。...

    Quartz-1.8.6 CSDN 下载

    Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖...

    Quartz-2.2.3 CSDN 下载

    Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖...

    JAVA定时器Quartz及使用说明

    Quartz是一款功能强大的开源Java定时框架,用于在Java应用程序中创建和管理计划任务。它允许开发者精确地安排作业,从简单的一次性任务到复杂的调度模式。Quartz 1.5.2是该项目的一个较旧版本,但它仍然包含了实现...

    quartz cronExpression配置说明

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz中,`cronExpression`是用于设置基于cron表达式的时间触发规则的关键配置项,这种表达式允许我们以非常灵活的...

Global site tag (gtag.js) - Google Analytics