文章目录

  • 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 classJobDetail job = newJob(MyJob.class).withIdentity("myJob", "group1") // name "myJob", group "group1".build();// Trigger the job to run now, and then every 40 secondsTrigger trigger = newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever())            .build();// Tell quartz to schedule the job using our triggersched.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 有多个变体,用于定义不同类型的周期。

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)允许进行分组,这对于任务和触发器来说非常易于组织成像“报表任务”或“维护任务”这样的分组。 分组中的键必须唯一。

Quartz- Quartz API以及Jobs 和Triggers介绍相关推荐

  1. Quartz.net官方开发指南 第二课:Jobs And Triggers

    正如前面所提到的那样,通过实现IJob接口来使你的.NET组件可以很简单地被scheduler执行.下面是IJob接口: namespace Quartz {      /**//// <sum ...

  2. Quartz教程三:Job与JobDetail介绍

    Quartz教程三:Job与JobDetail介绍 原文链接 | 译文链接 | 翻译:nkcoder | 校对: 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感 ...

  3. 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍

    使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...

  4. arcgis api 4.13 —— Layer详细介绍

    arcgis api 4.13 Layer详细介绍 近日,esri官方更新了arcgis api4.12版本,接下来我将就此API做一个大概的梳理.本篇文章是关于图层(layer)的一个大概.主要分为 ...

  5. Redis之Hash超详细API使用及应用场景介绍,不看亏了!

    j3_liuliang Redis常用API即应用场景系列(Hash),如果觉得有用可以关注博主,不定时更新哦! 相关文章导航 超详细Redis之Key操作API,什么?看不懂!你来锤我 Redis之 ...

  6. Quartz中Triggers介绍

    Trigger的公共属性 所有类型的trigger都有TriggerKey这个属性,表示trigger的身份:除此之外,trigger还有很多其它的公共属性.这些属性,在构建trigger的时候可以通 ...

  7. ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)

    主要更新: 1:升级处理机制(js请求由同步变更为异步) 2:优化前端JS:包括API和配置方式. 3:增加InputDialog功能. 4:增远远程验证功能. 5:优化权限安全机制. 6:增加一次请 ...

  8. API身份验证和授权介绍

    一.前言 用户通常需要注册API KEY或者其他验证方法,才能使用你的服务,一般我们会用到一下集中验证方式 API Keys Basic Auth HMAC OAuth 身份验证:指证明正确的身份, ...

  9. Posix API 与 网络协议栈 详细介绍

    Posix API 与 网络协议栈 前言 Posix API 有哪些 socket bind 三次握手 建立连接的过程 connect listen accept 数据传输 发送与接收 send &a ...

最新文章

  1. 【图】2015年Google搜索引擎排名算法(完整版)
  2. Linux运维笔记-文档总结-NFS文件共享(网络文件系统)
  3. postgresql 子查询_PostgreSQL子事务及性能分析
  4. 股上涨和下跌天数比_面对下跌,如何信心十足地逢低买入?
  5. android平板 深度学习,这款叫Remix的设备,或许可以拯救安卓平板
  6. java开发和structs的关系_java---springMVC与strutsMVC的区别
  7. 黑客攻防技术宝典Web实战篇第2版—第6章 攻击验证机制
  8. Decision Tree决策树练习题
  9. Filter体现职责链模式
  10. html 可换行属性,html里title属性换行的方法
  11. 【优化预测】基于matlab人工鱼群算法优化BP神经网络预测【含Matlab源码 523期】
  12. dll中封装MFC(VC2012)资源--自定义一个复用的登录界面
  13. 《程序员》沉痛悼念王江民先生
  14. PHP爆绝对路径方法收集
  15. Linux误操作嘟嘟声去掉方法
  16. 线段树 - 敌兵布阵
  17. Air Pods用着怎么样?
  18. Mysql——》通信方式:半双工
  19. java实现图片反色
  20. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(20):用配方法化二次型为标准形

热门文章

  1. 运行caffe自带的mnist实例教程
  2. python super 理解(一)
  3. 关于计算机应用技术的周记,计算机应用技术专业实习周记范文
  4. lwip协议栈优化_干货分享 | KNI性能优化实践
  5. python打地鼠游戏教程_Python入门小游戏,炫酷打地鼠教程第二部分,都是干货
  6. Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)
  7. Leetcode 54 螺旋矩阵 (每日一题 20210729)
  8. 598. Range Addition II(Python)
  9. 文巾解题 620. 有趣的电影
  10. pytorch实现简易分类模型