Quartz系列笔记(3)--Quartz API、Job和Trigger简介

       Quartz框架主要的API接口主要有下面几个:

            1) scheduler- 调度器的主接口

            2) Job -- 一个Java类想要成为一个Job必须实现这个类

            3) JobDetail -- 用来定义Job实例

            4) Trigger -- 触发器实例

            5)JobBuilder -- 用来定义JobDetail实例

            6)TriggerBuilder -- 用来定义触发器实例

       一个scheduler的生命周期从它被schedulerFactory创u开始被shutdown结束。一旦一个scheduler被创建以后,我们就可以向这个调度器添加、删除Job和Trigger,列出这个scheduler绑定的Job和Trigger,以及其他操作(比如将某个Trigger挂起)。正如上一讲中描述的,如果scheduler的start方法不被调用,绑定到他上面的Trigger和Job都不会生效。

       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静态导入的方法创建一个Job,同样的,通过从TriggerBuilder导入的静态方法创建Trigger。

        静态导入可以通过下面的代码实现:

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.*;
       Quartz框架提供了多种scheduleBuilder类,这些类可以创建不同类型的scheduler。DateBuilder类提供了很多方法能够很方便的构建特定时间点的时间实例(比如说能够得到当前时间的下个整点时间点 )

       The Job Interface

 package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)
      throws JobExecutionException;
  }

     当一个Job的触发器触发的时候,上面的execute方法会被调用。JobExecutionContext包含了Job的运行时信息 。

     JobDetail对象是在被添加到调度器的时候被Quartz客户端(也就是你的程序)创建的。JobDetail这个对象有很多属性可以设置,比如说JobDataMap,它可以被用来存储一个 Job的状态信息。JobDataMap是我们定义一个Job时最重要的东西,在后面的章节中我们会重点讨论。

      触发器对象用来触发一个Job的执行。当你想要调度一个Job的时候,你需要实例化一个触发器并将它的触发时间调整到你希望的时间点。触发器也可以有和他们关联的JobDataMap(当多个触发器会触发同一个Job,但是需要向这个Job传递不同的data时特别有用)。Quartz框架有很多种触发器,最常用的是SimpleTrigger和CronTrigg。

      为什么会将Job和触发器分开设计呢?许多任务调度框架没有将Job和Trigger的概念分开,一些框架甚至将Job简单的定义为一个在固定时间点执行 的“方法”。然而更多的是将Job和Trigger。当我们设计Quartz的时候,我们认为将调度和任务的执行是有意义的,这将有很多好处。

      比如,Job可以独立于Trigger之外存储在scheduler中,多个触发器可以被绑定到一个Job。这种松耦合的另外一种好处是:当一个Trigger过期之后,可以重新复用和这个Trigger绑定的Job。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值