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在多线程环境下运行任务的实例。 首先,`StdSchedulerFactory`是Quartz中的调度器工厂类,它是创建`Scheduler`对象的主要方式。`...
这个压缩包"quartz线程管理共7页.pdf.zip"很可能包含了一篇关于Quartz线程管理的详细文档,虽然具体的文件名不完整,但我们可以推测其内容可能涵盖了Quartz的核心概念和线程管理相关的技术点。 Quartz的核心概念...
总结来说,"quartz线程工程实例"是一个关于如何在Java项目中使用Quartz框架来实现任务调度的实例,涵盖了从创建Scheduler、定义Job、设计Trigger,到Spring集成Quartz、动态调度、线程控制和持久化等一系列关键知识...
Quartz集群调度的优势在于可以水平扩展、提高系统的处理能力和可靠性。 平台集成 Quartz支持多种平台的集成,包括Spring、 Hibernate、JDBC等。Quartz可以与Spring框架集成,以便使用Spring的依赖注入和AOP功能。...
2. **配置**:可以通过`quartz.properties`文件或者应用程序配置文件进行配置,比如设置调度器实例名、线程池类型、线程数量、优先级以及作业存储类型等。 3. **定义作业和触发器**:创建自定义的作业类,继承自`...
用一个工作线程创建一个调度程序; 安排三个不同优先级的触发器,第一次同时触发,第二次以错开的时间间隔触发; 启动Quartz Scheduler; 等待30秒让 Job 有机会触发触发器; 关闭调度程序;
C# winform windows版本的进程监控,基于多线程Quartz实现,每10秒监测一次。 1.进程监控每10秒监测一次。 2.红色表示 对其监控,但是未运行 3.灰色表示未启用对当前进程的监控 4.白色表示正常运行的进程信息
5. 为了确保程序退出时能够正确关闭调度器,通常会在应用程序的生命周期事件中处理Scheduler的停止。 在项目文件"process-monitor-developer"中,可能包含了以下内容: - 源代码文件:C#源代码文件,包含Job类的...
关于终止执行的任务,Quartz提供了`scheduler.pauseJob()`和`scheduler.resumeJob()`方法来暂停和恢复Job。如果你想要终止某个任务,你可以调用`scheduler.deleteJob()`来移除Job实例,使其不再执行。例如: ```...
这个是spring 和 quartz的集成,quartz是单独的包,java线程的方式运行,利用自定义Jobfactory来解决spring注入service空指针的问题,简单实例执行main方法即可,很实用
这是一个完整的使用Quartz定时处理案例,虽然简单,但是一个可运行的案例项目,包括了Quartz的包,及配置文件quartz.properties和quartz_jobs.xml文件的配置方法,及在web.xml文件中配置Quartz等方法。看了这个例子...
- **ThreadNamePrefix**:线程名称的前缀,方便识别执行 Quartz 任务的线程。 ### 四、Quartz 线程池的优化 1. **合理设置线程池大小**:根据应用的并发需求和服务器资源,调整线程池大小,避免过度消耗系统资源或...
以下是 Quartz 的关键组件、接口和使用方法的详细说明: 1. **Job 接口**: Job 接口是所有定时任务的基础,你需要自定义类去实现这个接口,并重写 `execute(JobExecutionContext arg0)` 方法。`execute()` 方法是...
Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz.NET怎样能并发运行多个作业的原理。...
Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖...
Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖...
Quartz是一款功能强大的开源Java定时框架,用于在Java应用程序中创建和管理计划任务。它允许开发者精确地安排作业,从简单的一次性任务到复杂的调度模式。Quartz 1.5.2是该项目的一个较旧版本,但它仍然包含了实现...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz中,`cronExpression`是用于设置基于cron表达式的时间触发规则的关键配置项,这种表达式允许我们以非常灵活的...
Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。 Quartz依赖...