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(二)
722 0
Quartz的重要接口API(二)
|
7天前
|
API PHP 开发者
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
|
13天前
|
JSON API 数据格式
微店商品列表接口(微店 API 系列)
微店商品列表接口是微店API系列的一部分,帮助开发者获取店铺中的商品信息。首先需注册微店开发者账号并完成实名认证,选择合适的开发工具如PyCharm或VS Code,并确保熟悉HTTP协议和JSON格式。该接口支持GET/POST请求,主要参数包括店铺ID、页码、每页数量和商品状态等。响应数据为JSON格式,包含商品详细信息及状态码。Python示例代码展示了如何调用此接口。应用场景包括商品管理系统集成、数据分析、多平台数据同步及商品展示推广。
|
5天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
29 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
4天前
|
监控 供应链 搜索推荐
亚马逊商品详情接口(亚马逊 API 系列)
亚马逊作为全球最大的电商平台之一,提供了丰富的商品资源。开发者和电商从业者可通过亚马逊商品详情接口获取商品的描述、价格、评论、排名等数据,对市场分析、竞品研究、价格监控及业务优化具有重要价值。接口基于MWS服务,支持HTTP/HTTPS协议,需注册并获得API权限。Python示例展示了如何使用mws库调用接口获取商品详情。应用场景包括价格监控、市场调研、智能选品、用户推荐和库存管理等,助力电商运营和决策。
51 23
|
5天前
|
JSON 数据挖掘 API
lazada商品详情接口 (lazada API系列)
Lazada 是东南亚知名电商平台,提供海量商品资源。通过其商品详情接口,开发者和商家可获取商品标题、价格、库存、描述、图片、用户评价等详细信息,助力市场竞争分析、商品优化及库存管理。接口采用 HTTP GET 请求,返回 JSON 格式的响应数据,支持 Python 等语言调用。应用场景包括竞品分析、价格趋势研究、用户评价分析及电商应用开发,为企业决策和用户体验提升提供有力支持。
52 21
|
2天前
|
JSON API 数据格式
eBay商品详情接口(ebay API系列)
eBay 商品详情接口是电商从业者、开发者和数据分析师获取商品详细信息的重要工具,涵盖标题、价格、库存、卖家信息等。使用前需在 eBay 开发者平台注册并获取 API 凭证,通过 HTTP GET 请求调用接口,返回 JSON 格式数据。Python 示例代码展示了如何发送请求并解析响应,确保合法合规使用数据。
32 12
|
1天前
|
JSON API 数据格式
阿里巴巴商品详情接口(阿里巴巴 API 系列)
在电商开发中,获取阿里巴巴商品详情信息对数据分析、竞品研究等至关重要。通过调用其商品详情接口,开发者可获取标题、价格、图片、描述等数据,满足多种业务需求。接口采用HTTPS协议,支持GET/POST请求,返回JSON格式数据。示例代码展示了如何使用Python的requests库进行接口请求,需传递商品ID和访问令牌。实际应用时,请依据官方文档调整参数并确保安全性。
27 10

热门文章

最新文章