`
wangrui
  • 浏览: 186723 次
  • 性别: 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 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

    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-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-2.3.0-API文档-中文版.zip

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

    springboot+quartz集群:通过动态配置调度dubbo接口/http接口代码实现

    springboot+quartz+mybatis:通过页面配置方式,动态配置dubbo job和http job,实现调度与业务完全解耦

    quartz-2.2.3.jar

    quartz:是一个任务调度框架,通过触发器设置作业的定时运行规则,来执行定时任务。相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。把一系列任务自动安置到一...

    Quartz_Job+Scheduling_Framework

    再次翻看一下我的博客,最早的那篇《 Quartz Job Scheduling Framwork 》翻译是在 2007 - 10 - 17 02:17 ,距离今日那是一个造人的时间,足见这个翻译过程有多难产。一方面是源于语言水平,再者其间也发生了许多事情...

    定时器Quartz使用说明

    定时器(Quartz)使用说明 Quartz开发指南 本文目前主要包括如下几个部分: Quartz功能简介:介绍Quartz的特点及概念。 使用Quartz的常见问题:很多用户在使用过程中遇到常见问题的解答。 快速开始:让读者尽快掌握...

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

    NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169156

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

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

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

    内容提要:Quartz 从属性文件中加载多个插件类时不能保证加载的顺序,所以本节引入一个自定义的统一按顺序加载其他插件的,名之为插件加载器的东西,其实也就是其他插件类的父亲。 第八章. 使用 Quartz 插件 (第五...

    ssm框架+quartz2.2Jar包

    spring4.2.2版本,springmvc,mybatis+quartz2.2

    quartz-all-1.6.1.jar

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,...

    Quartz Job Scheduling Framework

    Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。

    Quartz开发指南pdf版本

    本文目前主要包括如下几个部分: Quartz功能简介:介绍Quartz的...使用Quartz的常见问题:很多用户在使用过程中遇到常见问题的解答。 快速开始:让读者尽快掌握Quartz开发。 :通过一些列的课程来指导如何使用Quartz.

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

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

    Quartz Job Scheduling Framework.chm

    Quartz Job Scheduling Framework.chm

    quartz-1.6.2.zip

    quartz-1.6.2最新包,Quartz 是什么,大概不需多加说明,简单讲就是一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。

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

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

Global site tag (gtag.js) - Google Analytics