[译]Java定时任务调度-Quartz文档(二)Quartz API、Job & Scheduler
2017-03-20 15:03
435 查看
Quartz API
QuartzAPI中核心的接口如下:Scheduler:使用scheduler的主要接口;
Job:需要调度的任务所要实现的接口;
JobDetail:用来定义Job的实例;
Trigger:触发器,定义一个工作任务调度;
JobBuilder:用来定义JobDetail;
TriggleBuilder:用来定义Trigger;
Scheduler的生命周期伴随着初始化而开始(常常是通过SchedulerFactory),直到调用shutdown()方法结束。一旦创建,Scheduler即可执行add、remove、list Jobs and Triggers和另外一些调度相关的工作。需要注意的是,在Scheduler执行start方法之前,一切调度都不会发生。
quartz提供“builder”类作为DSL。和之前一样,这里再次给出相应的例子。
// define the job and tie it to our HelloJob class JobDetail job = newJob(HelloJob.class) .withIdentity("myJob", "group1") // name "myJob", group "group1" .build(); // Trigger the job to run now, and then every 40 seconds Trigger trigger = newTrigger() .withIdentity("myTrigger", "group1") .startNow() .withSchedule(simpleSchedule() .withIntervalInSeconds(40) .repeatForever()) .build(); // Tell quartz to schedule the job using our trigger sched.scheduleJob(job, trigger);
这段代码使用了JobBuilder中的静态方法构建类的定义。同理的还TriggerBuilder、SimpleScheduleBulder。
引入这些静态方法的语句如下:
import static org.quartz.JobBuilder.*; import static org.quartz.SimpleScheduleBuilder.*; import static org.quartz.CronScheduleBuilder.*; import static org.quartz.CalendarIntervalScheduleBuilder.*; import static org.quartz.TriggerBuilder.*; import static org.quartz.DateBuilder.*;
通过定义不同类型的schedules,调用不同的“ScheduleBuilder”的方法。
DateBuilder定义了一系列方法,可以很方便的构造以java.util.Date类型为时间点的调度(例如下一个偶数小时,如果现在是9:43:27的话,就意味着10点)
Job和Trigger
Job类必须实现Job接口,接口中只有一个方法:package org.quartz; public interface Job { public void execute(JobExecutionContext context) throws JobExecutionException; }
当job的触发器启动时,job的execute方法将被调度器中的某个工作进程调用。JobExecutionContext对象会作为参数传进该方法,用来提供“运行时”环境的相关信息。这个对象主要包括调用该方法的Scheduler的句柄,和触发器的句柄,这个job的job detail对象等等。
job detail对象是Quartz client(即你的程序)在job被添加到scheduler时创建的。它包含了一些属性参数、JobDataMap(用来存储job类的实例信息)。它本质上来说就是job的实例,后面讲阐述这里的细节。
Trigger对象是用来触发任务的执行的(或者称点火,firing)。调度一个任务之前,需创建一个Trigger并关联到一个适当的调度器。Trigger也有与之关联的JobDataMap,这在从Trigger向Job传递参数时非常有用。Quartz有多种很实用的trigger,最常用的就是SimpleTrigger和CronTrigger.
对于一次性的任务,或者从某个时间点开始,间隔T执行N次的任务,SimpleTrigger是很方便的。如果是基于“日历式”的调度,例如每个周五的中午,或者每个月第十天的10:15,可以使用CronTrigger。
为什么要设计Job和Trigger呢?很多调度框架没有区分任务和触发器的概念。某些框架将job简单的定义为在某个时间点做某些事,还有一些将其定义为类似于Quartz中job和trigger的结合。但在开发Quartz时,我们决定将任务与其调度分开定义是很有必要的。这样做有诸多好处。
例如,任务可以独立于调度器创建和存储,多个调度器也可以关联到一个任务。这样做的另一个好处,就是一项任务在调度完成之后,如果还有工作没做完,就可以配置另一个触发器再次调度,而不用再定义一个任务。
标识
在关联到Quartz scheduler时,Job和Trigger都需要指定相应的key。这些key可以归并到某些group,分类管理(例如需要记录的jobs、长期运行的jobs)。group内的key名是唯一的,换句话说,Job和Trigger实际意义上的key是由name和group组合而成的。原文链接:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-02.html
相关文章推荐
- Java定时任务调度工具详解之Quartz篇(中级)一:浅谈JobExecutionContext&JobDatai&浅谈Trigger
- [译]Java定时任务调度-Quartz文档(三)进一步讲讲Job和Job Detail
- [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory
- [译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners
- [译]Java定时任务调度-Quartz文档(十二)Miscellaneous Features of Quartz
- Java定时任务调度工具详解(4)— Quartz 之 Job/JobDetail/JobExecutionContext/JobDataMap
- [译]Java定时任务调度-Quartz文档(八)SchedulerListeners
- [译]Java定时任务调度-Quartz文档(六)CronTrigger
- [译]Java定时任务调度-Quartz文档(四)More About Triggers
- [译]Java定时任务调度-Quartz文档(十一)Advanced (Enterprise) Features
- [译]Java定时任务调度-Quartz文档(九)Job Stores
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
- [译]Java定时任务调度-Quartz文档(一)初步使用
- Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
- java中quartz 调度在一些定时任务(job)的入门级应用
- Java定时任务调度工具详解(7)— Quartz 之 Scheduler
- (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
- [译]Java定时任务调度-Quartz文档(五)SimpleTrigger
- java quartz框架创建定时任务异常: Trigger does not reference given job!
- quartz定时任务调度 自定义表单 java图片爬虫