Quartz核心原理之架构及基本元素介绍

这篇具有很好参考价值的文章主要介绍了Quartz核心原理之架构及基本元素介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 什么是Quartz

Quartz是一个作业调度框架,它可以与J2EE和J2SE应用相结合,也可以单独使用。它能够创建多个甚至数万个jobs这样复杂的程序,jobs可以做成标准的java组件或EJBS。Quartz很容易上手,创建一个任务仅需实现Job接口,该接口只有一个方法void execute(JobExecutionContext context) throws JobExecutionException;在java实现类添加作业逻辑,当配置好Job实现类并设置调度时间表后,Quartz将会监控任务的剩余时间,当调度程序确定需要通知需要执行该任务的时候,Quartz将会调用Job实现类的execute方法执行任务。

2 系统设计

Quartz框架的原理主要是通过将Job注册到调度器,再通过触发器策略执行Job,系统设计如下:

Quartz核心原理之架构及基本元素介绍

3 核心元素介绍

Quartz框架的核心是调度器scheduler,核心的组件包括Job(任务)、JobDetail(任务描述)、Trigger(触发器)。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。

3.1 Job

Job是一个接口,只有一个方法void execute(JobExecutionContext context) throws JobExecutionException。作业类需要实现接口中的execute方法,JobExecutionContext提供了调度的上下文信息,每一次执行Job都会重新创建一个Job对象实例。如下:

public interface Job {

    /*
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     * 
     * Interface.
     * 
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     */

    /**
     * <p>
     * Called by the <code>{@link Scheduler}</code> when a <code>{@link Trigger}</code>
     * fires that is associated with the <code>Job</code>.
     * </p>
     * 
     * <p>
     * The implementation may wish to set a 
     * {@link JobExecutionContext#setResult(Object) result} object on the 
     * {@link JobExecutionContext} before this method exits.  The result itself
     * is meaningless to Quartz, but may be informative to 
     * <code>{@link JobListener}s</code> or 
     * <code>{@link TriggerListener}s</code> that are watching the job's 
     * execution.
     * </p>
     * 
     * @throws JobExecutionException
     *           if there is an exception while executing the job.
     */
    void execute(JobExecutionContext context)
        throws JobExecutionException;

}
public class ClosePayJob implements Job{
public void execute(JobExecutionContext context)  throws JobExecutionException{
//业务逻辑
}
}

3.2 JobDetail

Quartz框架在每次执行Job时,都会重新创建一个Job对象实例,所以它需要Job类的信息以及其他相关信息,以便能够在运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,比如Job名字、描述、关联监听器等信息。JobDetail接口包含了能够创建Job类的信息载体,用来保存任务的详细信息。如下代码定义

public interface JobDetail extends Serializable, Cloneable {

    public JobKey getKey();

    /**
     * <p>
     * Return the description given to the <code>Job</code> instance by its
     * creator (if any).
     * </p>
     * 
     * @return null if no description was set.
     */
    public String getDescription();

    /**
     * <p>
     * Get the instance of <code>Job</code> that will be executed.
     * </p>
     */
    public Class<? extends Job> getJobClass();

    /**
     * <p>
     * Get the <code>JobDataMap</code> that is associated with the <code>Job</code>.
     * </p>
     */
    public JobDataMap getJobDataMap();

    /**
     * <p>
     * Whether or not the <code>Job</code> should remain stored after it is
     * orphaned (no <code>{@link Trigger}s</code> point to it).
     * </p>
     * 
     * <p>
     * If not explicitly set, the default value is <code>false</code>.
     * </p>
     * 
     * @return <code>true</code> if the Job should remain persisted after
     *         being orphaned.
     */
    public boolean isDurable();

    /**
     * @see PersistJobDataAfterExecution
     * @return whether the associated Job class carries the {@link PersistJobDataAfterExecution} annotation.
     */
    public boolean isPersistJobDataAfterExecution();

    /**
     * @see DisallowConcurrentExecution
     * @return whether the associated Job class carries the {@link DisallowConcurrentExecution} annotation.
     */
    public boolean isConcurrentExectionDisallowed();

    /**
     * <p>
     * Instructs the <code>Scheduler</code> whether or not the <code>Job</code>
     * should be re-executed if a 'recovery' or 'fail-over' situation is
     * encountered.
     * </p>
     * 
     * <p>
     * If not explicitly set, the default value is <code>false</code>.
     * </p>
     * 
     * @see JobExecutionContext#isRecovering()
     */
    public boolean requestsRecovery();

    public Object clone();

    /**
     * Get a {@link JobBuilder} that is configured to produce a 
     * <code>JobDetail</code> identical to this one.
     */
    public JobBuilder getJobBuilder();

}

3.3 Trigger

触发器(org.quartz.Trigger)抽象类的几个主要属性和JobDetail差不多,这里就不说明了,主要注意的是misfireInstruction这个属性,misfireInstruction这个属性的是触发器错失执行(misfire)后的一个错失触发机制标识。当线程池中没有可用的线程执行任务时,就会错过触发时间,Trigger抽象类中默认错失触发机制是常量0(聪明的策略)。派生类有它们自己的错失触发机制。最常用的两种是SimpleTrigger和CronTrigger。

3.3.1 SimpleTrigger

指定从某一个时间开始,以一定的时间间隔(单位是毫秒)执行的任务。

它适合的任务类似于:9:00 开始,每隔1小时,执行一次。

它的属性有:

  • repeatInterval 重复间隔
  • repeatCount 重复次数。实际执行次数是 repeatCount+1。因为在startTime的时候一定会执行一次。** 下面有关repeatCount 属性的都是同理

3.3.2 CronTrigger

适合于更复杂的任务,它支持类型于Linux Cron的语法(并且更强大)。基本上它覆盖了其他Trigger的绝大部分能力—— 当然,也更难理解。

它适合的任务类似于:每天0:00,9:00,18:00各执行一次。

它的属性只有:Cron表达式。

4 总结

本次文章只是对Quartz的架构和基本元素做了简单的介绍,后面我们会深入分析Quartz的核心类。

作者:京东物流 贾永强

来源:京东云开发者社区 自猿其说Tech 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-748541.html

到了这里,关于Quartz核心原理之架构及基本元素介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTML 基本元素是什么?

    \\\"HTML 基本元素\\\" 是指构成 HTML 网页的基本部分。HTML 是超文本标记语言的简称,是一种用于创建网页的标准标记语言。HTML 基本元素包括标题、段落、列表、链接、图片等,这些元素用于构建网页的结构和内容。通过使用 HTML 基本元素,开发者可以创建出丰富多样的网页,满足

    2024年01月25日
    浏览(37)
  • Go开始:Go基本元素介绍

    本文深入探讨了Go编程语言中的核心概念,包括标识符、、具名函数、具名值、定义类型、类型别名、包和模块管理,以及代码块和断行。这些元素是构成Go程序的基础,也是编写高质量代码的关键。 关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥

    2024年02月10日
    浏览(42)
  • python 概述及基本语法元素介绍

    Python 是一种跨平台的计算机程序设计语言,是 ABC 语言的替代品,属于面向对象的动态类型语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。 Python 支持多种编程范型,包括函数式、指令式、结构

    2024年02月09日
    浏览(38)
  • 【K8S 基本概念】Kurbernetes的架构和核心概念

    目录 一、Kurbernetes 1.1 简介 1.2、K8S的特性: 1.3、docker和K8S: 1.4、K8S的作用: 1.5、K8S的特性: 二、K8S集群架构与组件: 三、K8S的核心组件: 一、master组件: 1、kube-apiserver: 2、kube-controller-manager: 3、kube-scheduler: 4、ETCD组件: 二、node组件: 1、kubelet: 2、kube-proxy: 3、do

    2024年02月04日
    浏览(51)
  • 微信小程序基本组件元素介绍(一)

    本系列用于自己便于查找知识点,于此同时也想让其他更多的人了解到微信小程序中各个元素是如何运用的,通过经验分享与知识点记录督促自己学习,废话不多说,直接进入主题。 第一节首先介绍的是微信小程序中wxml部分中最常用的几个组件: 在学习HTML网页制作的过程中

    2024年02月06日
    浏览(43)
  • 云计算的基本概念术语说明和核心算法原理

    作者:禅与计算机程序设计艺术 云计算的基本概念是分布式处理、并行处理和网格计算的发展,是一种新兴的商业计算模型。它通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,使得企业数据中心的运行更与互联网相似。云计算的核心算法原理包括

    2024年02月14日
    浏览(49)
  • Spring Boot 核心运行原理介绍

    《Spring Boot 源码学习系列》 还记得,笔者在前面的博文《Spring Boot 项目介绍》中提到了,Spring Boot 最核心的功能就是自动配置,该功能的实现是基于 “约定由于配置” 的原则。 那很多读者就要问了, Spring Boot 它是如何来约定的呢?又是如何实现自动配置功能的呢? 从本篇

    2024年02月15日
    浏览(42)
  • 【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

    目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理

    2024年02月05日
    浏览(43)
  • Kafka核心设计与实践原理:设计理念、基本概念、主要功能与应用场景

    详细介绍Kafka作为分布式流式处理平台的设计理念、基本概念,以及其主要功能与应用场景,包括消息系统、容错的持久化、流式处理平台等功能,同时探讨如何保证消息的唯一性、消费顺序等问题。

    2024年02月22日
    浏览(47)
  • Spark(一): 基本架构及原理

    前言:  目标: 架构及生态: Spark与hadoop:  运行流程及特点: 常用术语: Spark运行模式: RDD运行流程: Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等

    2024年01月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包