Quartz学习 之 Jobs 和 Triggers

  一个任务是一个实现了 Job 接口的类。和下面展示一样,Job接口只有一个方法。

package org.quartz;  
  public interface Job {  
    public void execute(JobExecutionContext context)  
      throws JobExecutionException;  
  }

  当一个 Job 的触发器被触发, 调度器就会从线程池中拿一个线程来调用 execute(..)方法。 方法有一个参数 JobExecutionContext  context,通过这个参数可以获取Job运行时的信息,例如: 调度器执行它的一个处理、Job的JobDetail的对象等等。

  Quartz 客户端在添加job到调度器的时候,JobDetail的实例就被创建了。这个对象有各种各样的属性,用来配置Job。而且还有一个 JobDataMap ,用来保存Job 类的实例的状态信息。JobDetail对象可以构造出 Job 实例。

  Trigger 对象可以触发Job的执行。当你要调度一个Job,你需要初始化一个Trigger对象,并且根据你的需求设置你所需要的属性。

  Trigger 也有JobDataMap , 触发器被触发,JobDataMap 可以很好的 Pass 参数给Job。Quartz 提供了一些很有用的触发器类型,但是最常用的触发器类型有 SimpleTrigger 和 CronTrigger。

  • SimpleTrigger : 如果你需要在某一个时间的时刻执行一次,或者 你需要在某一个时间的时刻执行一次(n次)。
  • CronTrigger :如果你想象日历上时间计划来执行,譬如 每天早上5点都执行一次。

  为什么会有 Jobs 和 Triggers? 很多 任务调度器都没有把 Jobs 和 Triggers 的概念分开。一些调度器 把 Job 简单的作为一个执行时间,以及一些小的Job标识。其他的一些调度器把 Jobs 和 Triggers 的概念混淆在一起。Quartz的设计,把 执行的计划 和 具体的业务工作 分开了。这样会很好的。

  举一个例子,你可以创建一个Job,并且把它保存在 Job的调度器里面。这样的话,你就可以将这个Job 关联到很多的 Trigger 中。例外一个好处就是实现了解耦。

原文地址:https://www.cnblogs.com/aDiot/p/5333262.html