`
wangrui
  • 浏览: 189565 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Quartz使用之:Job的兄弟姐妹

阅读更多
本篇讲述:Job、JobDetail、JobDataMap、JobExecutionContext的用法。

1、Job
Quartz中Job必须实现Job接口。实现了Job接口的Job类描述了被执行的任务。Job接口如下:
package org.quartz;
public interface Job {
    void execute(JobExecutionContext context)throws JobExecutionException;
}

Job被触发时,execute方法会被调用。在execute方法被执行时,仅允许抛出一个JobExecutionException类型异常。因此需要将整个要执行的内容包括在一个'try-catch'块中。Job能够使用它向scheduler提供各种指示。

2、JobExecutionContext
JobExecutionContext描述了Job执行的上下文环境,包括执行这个Job的Scheduler对象句柄、Job的Trigger对象句柄、JobDataMap对象。

3、JobDetail
在我们将Job加入Scheduler时,会用到JobDetail对象。该对象包含了Job的各种设置属性以及一个JobDataMap对象。

JobDetail jobDetail = new JobDetail("myJob","myGroup",MyJob.class)
说明:
myJob:job 名 
myGroup:job 组(为'null'时,使用缺省的组sched.DEFAULT_GROUP) 
MyJob.class:要被执行的Java类。

这里只指定了Job的类,每次scheduler执行这个任务时,它就创建这个类的新实例,然后调用该实例的execute(..)方法。对这种行为的一个推论就是Job类必须有一个无参数的构造函数。另外一个推论就是它使得Job类中定义的成员数据失去意义,因为这些成员数据值在每次执行的时候被“清空”了。
通过JobDetail对象可以定义Job的其它属性。
• Durability(持久性)-如果一个Job是不持久的, 一旦没有触发器与之关联,它就会被从scheduler 中自动删除。
• Volatility(无常性)-如果一个Job是无常的,在重新启动Quartz i scheduler 时它不能被保持。
• RequestsRecovery(请求恢复能力) -如果一个Job具备“请求恢复”能力,当它在执行时遇到scheduler “硬性的关闭”(例如:执行的过程崩溃,或者计算机被关机),那么当scheduler重新启动时,这个任务会被重新执行。这种情况下,JobExecutionContext.isRecovering() 方法的返回值将是true。
• JobListeners(任务监听器) -一个Job如果有0个或者多个JobListeners监听器与之相关联,当这个Job执行时,监听器被会被通知。更多有关JobListeners的讨论见TriggerListeners & JobListeners章节。

4.JobDataMap
JobDataMap被用来保存一系列的(序列化的)对象,这些对象在Job执行时可以得到。JobDataMap是Java Map接口的一个实现,而且还增加了一些存储和读取主类型数据的便捷方法。
如果使用一个持久的JobStore,那么必须注意存放在JobDataMap中的内容。因为放入JobDataMap中的内容将被序列化,而且容易出现类型转换问题。很明显,标准Java类型将是非常安全的,但除此之外的类型,任何时候,只要有人改变了你要序列化其实例的类的定义,就要注意是否打破了程序的兼容性。另外,你可以对JobStore和JobDataMap采用一种使用模式:就是只把主类型和String类型存放在Map中,这样就可以减少后面序列化的问题。
Triggers也可以有JobDataMaps与之相关联。当scheduler中的Job被多个有规律或者重复触发的Triggers所使用时非常有用。对于每次独立的触发,你可为Job提供不同的输入数据。
从Job执行时的JobExecutionContext中取得JobDataMap是惯用手段,它融合了从JobDetail和从Trigger中获的JobDataMap,当有相同名字的键时,它用后者的值覆盖前者值。

5.StatefulJob
有状态和无状态任务
一个Job实例可以被定义为“有状态的”或者“无状态的”。“无状态的”任务只拥有它们被加入到scheduler时所存储的JobDataMap。这意味着,在执行任务过程中任何对Job Data Map所作的更改都将丢失而且任务下次执行时也无法看到。你可能会猜想出,有状态的任务恰好相反,它在任务的每次执行之后重新存储JobDataMap。有状态任务的一个副作用就是它不能并发执行。换句话说,如果任务有状态,那么当触发器在这个任务已经在执行的时候试图触发它,这个触发器就会被阻塞(等待),直到前面的执行完成。
想使任务有状态,它就要实现StatefulJob接口而不是实现Job接口。

6.其他
可以创建一个单独的Job类,并且通过创建多个JobDetails实例来将它的多个实例存储在scheduler中,这样每个JobDetails对象都有它自己的一套属性和JobDataMap,而且将它们都加入到scheduler中。
当触发器被触发的时候,通过Scheduler中配置的JobFactory来实例化与之关联的Job类。缺省的JobFactory只是简单地对Job类调用newInstance()方法。创建己JobFactory可以利用应用中诸如Ioc或者DI容器所产生或者初始化的Job实例。


分享到:
评论

相关推荐

    对于Quartz.net 3.0.7.0(目前最高版本)的使用:能过配置文件实现工作调整

    在描述中提到的问题是关于如何在3.x版本中通过`quartz_jobs.xml`配置文件实现作业调度,这在许多教程中可能较少被提及,因为早期版本的Quartz.NET更倾向于使用XML配置,而新版本则倾向于使用代码配置或者混合方式。...

    spring quartz学习总结: cluster的配置和示例

    Spring Quartz是一款广泛使用的Java任务调度框架,用于在应用程序中安排周期性或一次性任务。Quartz集群(Cluster)是指多个Quartz实例(节点)共享相同的作业和触发器,从而实现高可用性和故障转移。本文将深入探讨...

    quartz所需jar包 1.6.0、1.8.5、2.2.1三个版本

    - `quartz-all-1.6.0.jar`包含所有必要的依赖,使得开发者可以直接引入此单一jar包来使用Quartz。 - 此版本可能不包含一些高级特性,如集群支持或更完善的API。 2. **Quartz 1.8.5**: - 作为1.x系列的一个更新...

    Quartz 线程池

    2. **使用合适的 Job 类型**:对于计算密集型任务,可以选择使用 StatefulJob,保证每次执行都在新的线程中;而对于无状态任务,使用 StatelessJob 可以提高效率。 3. **监控与调整**:实时监控 Quartz 的运行状态...

    quartz job持久化

    实现把job持久化数据库,里面有具体的说明文档 Quartz 1 1 通过quartz创建持久化定时...1.3.1 实现org.quartz.Job接口 6 1.3.2 把以上job持久化到数据库中 6 1.4 启动job所需条件 6 1.4.1 在web.xml中加入如下监听 6

    springboot整合quartz定时任务yml文件配置方式

    quartz: job-store-type: jdbc auto-startup: true scheduler-instance-id: AUTO thread-pool: thread-count: 10 ``` 2. **数据库配置**:由于我们选择了基于数据库的作业存储(job-store-type: jdbc),...

    Quartz Job Scheduling Framework 中文版 V1.0.0.rar

    1. **Job(作业)**:Job是实际要执行的任务,它是实现了`org.quartz.Job`接口的类。开发者需要定义自己的Job类,覆盖`execute()`方法来实现具体的业务逻辑。 2. **Trigger(触发器)**:Trigger决定了Job何时被...

    ssm框架+quartz2.2Jar包

    5. **使用Quartz API**:在需要的地方,如Service层,可以调用Quartz提供的API来触发或修改任务。 SSM框架结合Quartz,可以实现灵活的定时任务调度,比如数据库清理、数据同步、统计分析等后台业务。这样的设计使得...

    quartz系列之九:存储

    3. **JDBCJobStore**:这是Quartz最常用的持久化策略,它使用数据库来存储Job和Trigger的信息。JDBCJobStore分为几种类型,如`TableBasedJobStore`和`ClusteredJobStore`,分别适应单服务器和集群环境。 4. **JPA和...

    quartz有状态Job和无状态Job

    ### quartz有状态Job和无状态Job详解 #### 一、概述 在Quartz调度器中,根据Job是否能够保持状态,可以将其分为两类:有状态Job(Stateful Job)和无状态Job( Stateless Job)。这两种类型的Job在实现上有所不同,并且...

    Quartz Job Scheduling Framework 中文版

    Quartz Job Scheduling Framework 是一个强大的、开源的Java作业调度框架,它允许应用程序定义和执行复杂的定时任务。这个框架的设计目标是提供一个简单且可扩展的解决方案,用于在分布式环境中调度作业。Quartz的...

    quartz-2.3.2-API文档-中文版.zip

    Maven坐标:org.quartz-scheduler:quartz:2.3.2; 标签:quartz、scheduler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    quartz-1.6.1-API文档-中英对照版.zip

    赠送jar包:quartz-1.6.1.jar 赠送原API文档:quartz-1.6.1-javadoc.jar 包含翻译后的API文档:quartz-1.6.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.opensymphony.quartz,...

    Quartz Job Scheduling Framework 中文版 V0.9.2

    "Quartz Job Scheduling Framework 中文版 V0.9.2.chm"文件很可能是该框架的中文文档,包含了详细的API参考、使用示例和教程,对于学习和应用Quartz来说非常有价值。通过阅读这份文档,你可以深入理解Quartz的各个...

    Quartz Job Scheduling Framework 中文版 chm版

    2. **Job**:Job是执行具体任务的实体,你需要继承`org.quartz.Job`接口并实现`execute(JobExecutionContext context)`方法来定义自己的作业逻辑。 3. **Trigger**:Trigger负责指定何时启动Job。Quartz支持多种...

    quartz-2.3.0-API文档-中文版.zip

    Maven坐标:org.quartz-scheduler:quartz:2.3.0; 标签:scheduler、quartz、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    quartz-job初始化数据表.zip

    Job(作业)是Quartz的核心概念,它代表一个需要被调度的任务。在Quartz中,我们通常需要配置一个数据库来存储作业、触发器以及相关的状态信息。"quartz-job初始化数据表.zip" 文件显然包含了用于设置Quartz作业调度...

    quartz2.2.3实战

    - **创建作业**:自定义 Job 类实现 `org.quartz.Job` 接口,定义执行逻辑。 - **定义触发器**:根据需求选择合适的 Trigger 类型,设置触发规则。 - **调度作业**:将 Job 和 Trigger 关联,添加到 Scheduler 中...

    Quartz Job Scheduling Framwork中文文档

    该文档“Quartz Job Scheduling Framework 中文版 V0.9.5.chm”是Quartz的中文版使用手册,包含了关于如何在项目中应用Quartz的详细信息。下面将对其中的关键知识点进行深入探讨: 1. **Job和Trigger**:在Quartz中...

    Spring Quatz 书-Quartz.Job.Scheduling.Framework.Building

    《Spring Quartz:构建可扩展的企业级应用》是一本专注于Quartz Job调度框架的专业书籍,它深入探讨了如何在Spring框架中有效地使用Quartz进行任务调度。Quartz是Java平台上广泛使用的开源作业调度库,它提供了丰富...

Global site tag (gtag.js) - Google Analytics