Quartz- Quartz API以及Jobs 和Triggers介绍

简介: Quartz- Quartz API以及Jobs 和Triggers介绍

Quartz API


Quartz API 主要包含了以下接口

  • Scheduler – 调度器,任务调度的主 API。
  • Job – 由调度器调度的任务需要实现的接口。
  • JobDetail – 用于定义任务的实例。
  • Trigger – 用于定义需要执行的任务和任务的执行时间。
  • JobBuilder – 用于定义/创建 JobDetail 实例。
  • TriggerBuilder – 用于定义/创建 Trigger 对象。



Scheduler(调度器)的生命周期由 SchedulerFactory 创建 Scheduler 开始到调用 shutdown() 结束。


一旦创建了 Scheduler 实例,就可以新增,移除,查看 Job 和 Trigger,和执行其它调度相关工作(例如暂停 Trigger)。


如果 Scheduler 没有调用 start() 方法,那么将不会执行任何 Trigger 上的任务。


Quartz 定义了 builder 类,它们定义了 Domain Specific Language(DSL,有时也成为“流式接口”)。


如下所示

 // define the job and tie it to our HelloJob class
  JobDetail job = newJob(MyJob.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 有多个变体,用于定义不同类型的周期。


aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcxMDA3MTI1NjA4ODA0.png

DateBuilder 中包含了大量的方法方便创建 java.util.Date 实例来指定时间。


Jobs 和 Triggers

任务需要实现 Job 接口,接口中只有一个方法:

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



当任务的 Trigger 被触发,任务的 execute 方法将会由调度器的一个工作线程调用。传入这个方法的 JobExecutionContext 对象用于提供任务运行环境的信息(包含了一个 Scheduler 的句柄,一个Trigger 的句柄,一个 JobDetail 的句柄和几个其它项)。


JobDetail 由 Quartz 客户端创建(你自己编写)。它包含了大量的任务属性设置和 JobMetaMap 对象(可用于存储任务的状态信息)。这个类本质上来说是用于定义 Job 对象。


Trigger 对象用于触发任务的执行。它定义了任务的执行时间。当你创建了一个 Trigger,你需要提供你需要的时间表(schedule)用于控制任务的执行。Trigger 可能还包含了 JobDataMap 对象,当你需要传递参数给 Job 的时候,这个类就相当有用。Quartz 提供了几个 Trigger 的实现,其中最常用的是 SimpleTrigger 和 CronTrigger。


SimpleTrigger 用于执行某个时间点执行一次的任务,或用于在某个时间执行一次任务,并且在 T 周期重复执行 N 次。CronTrigger 用于基于日历的任务,例如“每周五中午”或“每个月10号上午10点15分”执行。


为什么需要 Job 和 Trigger?有些任务调度方案没有分离 job 和 trigger,为什么 Quartz 需要分别定义 Job 和 Trigger 呢?主要基于以下考虑。


多个 Job 可以保存到同一个 Trigger,多个 Trigger 也可以关联到相同的 Job。这种松耦合的设计的另外一个好处是可以在 trigger 过期后配置任务到调度器中,方便以后重新开始任务,而不用再次定义任务。也允许在不更换任务的情况下更改和替换 Trigger。


唯一标识


Jobs 和 Triggers 可以使用 Quartz 调度器注册一个唯一标识。Job 和 Trigger 的键(JobKey 和 TriggerKey)允许进行分组,这对于任务和触发器来说非常易于组织成像“报表任务”或“维护任务”这样的分组。 分组中的键必须唯一。

相关文章
|
存储 API 调度
Quartz的重要接口API(二)
Quartz的重要接口API(二)
667 0
Quartz的重要接口API(二)
|
1月前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
114 1
|
5天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
28 6
|
29天前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
1月前
|
SQL 存储 数据处理
|
1月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
1月前
|
监控 API 数据安全/隐私保护
​邮件API触发式接口分析?邮件API接口好评榜
邮件API在企业通信和营销中至关重要,通过自动化邮件发送流程提升效率与客户满意度。本文解析邮件API触发式接口,即基于特定事件(如用户注册、购买产品)自动发送邮件的技术,能显著加快企业响应速度并增强用户体验。推荐市场上的优秀邮件API产品,包括SendGrid、Mailgun、Amazon SES、Postmark及新兴的AOKSend,它们各具特色,如高发送率、详细分析工具、灵活配置、强大的日志功能及用户友好的API接口,帮助企业根据不同需求选择最合适的邮件API解决方案。
|
1月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
58 8