Quartz教程 第2课 Quartz API、Job和Trigger

2课 Quartz APIJob和Trigger

2.1 Quartz API

Quartz API关键接口是:

  1. Scheduler:与scheduler交互的主要API
  2. Jobscheduler执行的组件要实现的接口。
  3. JobDetail:用于定义Job实例。
  4. TriggerJob这个组件定义了执行。
  5. JobBuilder:用于定义或者构建一个JobDetail实例,它只能定义Job实例。
  6. TriggerBuilder:用于定义或者构建Trigger实例。

Scheduler的生命周期起始于SchedulerFactory对它的创建,终止于调用shutdown方法对它关闭。一旦创建,就可以用Scheduler接口添加、移除、查询JobTrigger,也可以执行与调度有关的操作(例如暂停trigger)。然而,如果没有调用start方法,Scheduler不会执行任何trigger(执行job)

Quartz提供了“构建器”类来定义DSL(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);

构建job定义的代码块使用了从JobBuilder类静态导入的方法。同样的,构建trigger的代码块使用了从TriggerBuilder类静态导入的方法,同SimpleScheduleBuilder类一样。

DSL静态导入可以通过下面的这些导入语句实现:

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.*;

不同的ScheduleBuilder”类可以定义不同类型的调度器

DateBuilder 类包含各种方法来构造特定时间点的java.util.Date实例(例如,表示下一个偶数小时的日期,换句话说,如果现在是9:43:27,那么就是10:00:00)。

2.2 JobTrigger

一个Job就是一个实现了Job接口的类,它只有一个简单的方法:

Job接口:

  package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)

      throws JobExecutionException;

  }

Jobtrigger触发时(稍后再详细介绍)scheduler的工作者线程就会调用execute(..)方法。JobExecutionContext对象为job实例提供了运行时环境的信息:执行jobScheduler的句柄,触发这个执行的Trigger的句柄,jobJobDetail对象,以及一些其它信息。

Job被添加到scheduler时,Quartz客户端(即你的程序)就会创建JobDetail对象。它包含Job各种的属性设置,还有一个存储job类的状态信息的JobDataMap这基本就是job实例的定义,下一章节对进一步详细介绍。

Trigger 对象用于触发job执行(或启动)。当你希望调度一个job,你会实例化一个trigger,并将它的属性调整到你希望的执行计划。Trigger也有一个与之相关的JobDataMap:这对为job传递参数是有用的,这些job对于trigger来说都是特定的。Quartz自带了一些不同的trigger类型,但是最常用的类型是SimpleTriggerCronTrigger

如果你只需要执行一次,或者在给定的时间点启动job,并以时间间隔T,重复执行N次,那么SimpleTrigger是很方便的。如果你想要按照类似于日历的计划触发:例如每天中午、每月1010:15,那么CronTrigger就很有用了。

为什么要区分JobTrigger?许多作业调度器都没有将jobtrigger的概念分开。一些作业调度器只简单定义了一次执行时间,另加一个job标识符。还有一些其它的作业调度器更像是Quartzjobtrigger对象的联合体。当开发Quartz时,我们决定将创建schedule和执行这个schedule的工作分开是有意义的。在我们看来,这有很多好处。

例如,Job被创建,并被存储到与trigger独立的作业调度器里,很多trigger关联同样的job。这种松耦合的另一个好处是能够在trigger过期之后,配置调度器中的剩余任务,这样就可以重新调度这个job,而不需要重新定义它。它也允许你修改或者替换trigger,而不需要重新定义相关的job

2.3 标识

JobTrigger要给定标识符,因为它们要注册到Quartz scheduler中。JobTrigger (JobKeyTriggerKey)key允许它们放置到“组”中,分组对于jobtrigger的归类是很有用的,例如“报告作业”和“维护作业”。Jobtriggerkey的名字部分必须在组内是唯一的:换句话说,jobtrigger的完整的key(或标识符)是名字和组的组合。

你现在已经对JobTrigger有了大概的认识,你可以从第3课和第4课学习有关它们更多的知识。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值