您的位置:首页 > 编程语言 > Java开发

[译]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 任务调度
相关文章推荐