[译]Java定时任务调度-Quartz文档(二)Quartz API、Job & Scheduler

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值