基本介绍和核心接口

1.quartz是完全基于java的可用于进行定时任务调度的开源框架,使用的时候需要引入:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

2.核心接口包括:

  • Job: 就是要执行的任务,该接口只有一个方法execute(JobExecutionContext jobExecutionContext)方法,Job运行时的信息保存在JobDataMap中(JobDataMap下面介绍)
  • JobDetail: 定义Job的实例。接收Job名字、描述以及Job类等信息
  • Trigger: 触发Job运行的东西,主要包括四类:SimpleTriger、CronTrigger、DateIntervalTrigger和NthIncludeDayTrigger,目前常用的是前两种
  • JobBuilder: 定义和创建JobDetail实例的接口
  • TriggerBuilder: 定义和创建Trigger实例的接口
  • Scheduler: quartz的运行容器,Trigger和JobDetail可以注册到scheduler中,两者在Scheduler中拥有各自的组及名称(组及名称是Scheduler查找定位容器中某一对象的依据),Trigger和JobDetail的组合名称都必须唯一,但是两者的组和名称可以相同,因为它们是不同类,一个job可以对应多个trigger,但是一个trigger只能对应一个job

注意:
传递给scheduler的是JobDetail而不是Job,JobDetail通过接收到的有关Job的信息,使用反射机制实例化Job,并且每次Job执行完之后,Job class的实例会被丢弃,Jvm的垃圾回收器会将他们回收,所以Job实例实现时,需要注意以下几点:

  • 必须具有一个无参构造函数
  • 不能有静态数据类型。因为每次job实例执行完之后便被回收,而静态成员变量因为依附于类存在,并不能被回收,如果静态变量的值被某个类修改,它的值就没法被保护

这些接口的关系图如下:

线程

在Quartz中,有两类线程,Shceduler调度线程任务执行线程前者包括普通任务调度Misfire任务调度(Misfire见这里后者需要一个线程池维护,调度图如下:

传递数据

尽管Job类不好定义静态变量,但是可以通过JobDataMap传递数据,JobDataMap是JobDetail的成员变量,可以借助JobDataMap为Job实例提供属性/配置,可以通过它来追踪Job的执行状态等等。对于第一种情况,可以在创建Job时,添加JobDataMap数据,在Job的execute()中获取数据(参见下面simpleTrigger的使用实例)第二种,则可以在Listener中通过获取JobDataMap中存储的状态数据追踪Job的执行状态。

【原理、注意点】Quartz的原理和需要注意的地方的更多相关文章

  1. 【转】Spring Quartz的原理

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job 表示 ...

  2. 定时组件quartz系列<二>quartz的原理

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便.   一.核心概念   Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.   1. ...

  3. 实现quartz定时器及quartz定时器原理介绍(转)

    一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...

  4. 实现quartz定时器及quartz定时器原理介绍

    今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍

  5. 深入解读Quartz的原理

     Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便.   一.核心概念   Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.   1 ...

  6. IIS站点工作原理与ASP.NET工作原理

    IIS站点工作原理与ASP.NET工作原理  一.IIS IIS 7.0工作原理图 两种模式: 1.用户模式(User Mode)(运行用户的程序代码.限制在特定的范围内活动.有些操作必须要受到Ker ...

  7. Quartz定时器原理与使用

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是一个完全由java编写的开源作业调度框架. Quartz可以用来创建简单或为运行十个,百个,甚至是好几 ...

  8. Quartz技术原理

    Quartz运行基本: (1)       创建任务jobDetail(放入具体的jobImpl),触发器trigger(保存job的触发策略),均放入调度器scheduler. (2)       ...

  9. Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)

    Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...

随机推荐

  1. <5>Lua多返回值和require模块

    1.多返回值 --1: 一个lua函数可以返回多个返回值: --2: 定义多个变量来接受多返回值 --3: lua的unpack函数,解开表里的单个的值; 结果 2.require模块 --1: 第一 ...

  2. Windows server 2008 R2实现多用户远程连接 (转)

    经常使用远程桌面的朋友可能会注意到,Windows server 2008 R2中,远程桌面最多只允许两个人远程连接,第三个人就无法连接过去,但是生产环境中有一些服务器可能有许多人需要连接上去,而微软 ...

  3. 谈谈CSS中一些比较"偏门"的小知识

    前面我写了:谈谈html中一些比较"偏门"的知识,现在这篇(主要)想谈谈个人所见的CSS一些小知识点,加深印象:同时也希望有需要的人能有收获! 1.常见的浏览器内核: 以IE为代表 ...

  4. html5-css的使用强制优先级

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. windows10 安装 mysql8.0.12 详解

    [1]下载安装包 官网下载地址:https://downloads.mysql.com/archives/community/ 如下图所示: 下载完成,安装包为mysql-8.0.12-winx64. ...

  6. Presto 学习

    Presto 基础知识与概念学习可以参考这些博客: presto 0.166概述 https://www.cnblogs.com/sorco/p/7060166.html Presto学习-prest ...

  7. spriteJS

    https://blog.csdn.net/qq_37261367/article/details/84662028

  8. Runtime单例模式类 -- 控制电脑关机

    package demo1; import java.io.IOException; public class RunTimeDemo { public static void main(String ...

  9. super和this关键字

    super关键字: this关键字: 栈内存和堆内存和方法区内存分析: 其中,new出来的即对象都在堆内存区: main方法先进栈: 方法区中 [[ super_class ]]是编译器生成,代码表现 ...

  10. flask 在模板中渲染错误消息

    在模板中渲染错误消息 如果form.valicate_on_submit()返回False,说明验证没有通过,对于没有验证通过的字段,WTForms会把错误信息添加到表单类的errors属性中,这是一 ...