Quartz 教程(二)Quartz API,任务、触发器

Quartz API

Quartz API的关键接口是:

  • Scheduler - 与调度程序交互的主要API。
  • Job - 希望由调度器执行的组件实现的接口。
  • JobDetail- 用于定义作业的实例。
  • Trigger-定义执行给定Job的时间表的组件。
  • JobBuilder-用于定义/构建定义Jobs实例的JobDetail实例。
  • TriggerBuilder-用于定义/构建触发器实例。

调度器的生命周期受其创建的限制,通过SchedulerFactory和对其shutdown()方法的调用。一旦创建了调度器实例,就可以使用add, removelist JobsTriggers,并执行其他与调度相关的操作(例如暂停触发器)。然而,如第1课中所示,调度器实际上不会对任何触发器(执行任务)执行操作,而是通过start()方法启动。

Quartz提供定义域特定语言的“builder”类。在前一课中,您看到了一个例子,我们再次介绍一部分内容:

 // 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类。

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)。


任务和触发器

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

The Job Interface

 package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)
      throws JobExecutionException;
  }

当任务的触发器触发时,execute(..)方法由调度程序的其中一个工作线程调用。传递给此方法的JobExecutionContext对象为任务实例提供有关其“运行时”环境的信息 - 执行它的调度程序的实例,触发执行的触发器的实例,任务的JobDetail对象以及其他几个信息。

JobDetail对象是在Job添加到调度器时由Quartz客户端(您的程序)创建的。它包含Job的各种属性设置,以及一个JobDataMap,可用于存储任务类的给定实例的状态信息。它基本上是任务实例的定义,并在下一课中进一步详细讨论。

触发器对象用于触发任务的执行。当你希望安排一项任务时,你可以实例化一个触发器并“调整”它的属性以提供你想要的安排。触发器也可能有一个与它们相关的JobDataMap - 这对于将参数传递给特定于触发器触发的Job是很有用的。 Quartz提供了一些不同的触发器类型,但最常用的类型是SimpleTrigger和CronTrigger。

如果您需要“一次性”执行(在某个特定时间只执行一项作业),或者如果您需要在给定时间启动作业,并重复执行N次,SimpleTrigger会很方便的执行。如果您希望根据类似日历的时间表进行触发,例如“每个星期五,中午”或“每个月的第10天的10:15”,则CronTrigger非常有用。

为什么会有“任务”和“触发器”?许多同类的任务调度框架没有单独的任务和触发器概念。一部分将'任务'定义为执行时间(或计划)以及一些小型工作标识符,其他部分很像Quartz的工作和触发对象的结合。在开发Quartz的过程中,我们决定在时间表和要在该时间表上执行的工作之间建立一个区分是有意义的。这有很多好处(在我们看来)
例如,可以独立于触发器创建并存储调度器中的任务,并且许多触发器可以与同一任务相关联。这种松散耦合的另一个好处是能够配置调度程序在其关联的触发器过期后保留的任务,以便稍后重新调度它,而不必重新定义它。它还允许您修改或替换触发器,而无需重新定义其关联任务。


特性

任务和触发器在向Quartz调度器注册时给出标识键。任务和触发器的键(JobKey和TriggerKey)允许将它们放入'groups'中,这对组织作业和触发器可以用于“reporting jobs”和“maintenance jobs”等类别非常有用。任务或触发器的键名称部分在组中必须是唯一的 - 换句话说,作业或触发器的完整键(或标识符)是namegroup的组合。

您现在对工作和触发器有什么总体概念,您可以在第3课:关于工作和工作详情以及第4课:关于触发器的更多信息中了解更多信息。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值