0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Quartz任务调度基本实现原理

jf_78858299 来源:SpringBoot 作者: 林祥纤 2023-04-12 10:48 次阅读

(1)什么是Quartz?

Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类。

(2)Quartz的特点;

作为一个优秀的开源调度框架,Quartz 具有以下特点:

① 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;

② 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;

③ 分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升。

④ Quartz 很容易与 Spring 集成实现灵活可配置的调度功能。

(3)Quartz专用词汇说明;

下面是本文中用到的一些专用词汇,在此声明:

scheduler

任务调度器

trigger

触发器,用于定义任务调度时间规则

job

任务,即被调度的任务

misfire

错过的,指本来应该被执行但实际没有被执行的任务调度

(4)Quartz任务调度基本实现原理;

Quartz 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger 和 job 是任务调度的元数据, scheduler 是实际执行调度的控制器

在 Quartz 中,trigger 是用于定义调度时间的元素,即按照什么时间规则去执行任务。Quartz 中主要提供了四种类型的 trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和 NthIncludedDayTrigger。这四种 trigger 可以满足企业应用中的绝大部分需求。

在 Quartz 中,job 用于表示被调度的任务。主要有两种类型的 job:无状态的(stateless)和有状态的(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。

在 Quartz 中, scheduler 由 scheduler 工厂创建:DirectSchedulerFactory 或者 StdSchedulerFactory。 第二种工厂 StdSchedulerFactory 使用较多,因为 DirectSchedulerFactory 使用起来不够方便,需要作许多详细的手工编码设置。 Scheduler 主要有三种:RemoteMBeanScheduler, RemoteScheduler 和 StdScheduler。本文以最常用的 StdScheduler 为例讲解。这也是笔者在项目中所使用的 scheduler 类。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103001
  • 框架
    +关注

    关注

    0

    文章

    297

    浏览量

    17046
  • 触发器
    +关注

    关注

    14

    文章

    1685

    浏览量

    60412
  • Quartz
    +关注

    关注

    0

    文章

    7

    浏览量

    7906
收藏 人收藏

    评论

    相关推荐

    μC/OS的任务调度实现方法及PowerPC上的优化

    那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。  1 基于优先级的任务调度  一个基于优先级的实时多任务内核的任务调度机制需要
    发表于 04-16 09:18

    STM32 简单多任务调度

    不需要这样频繁的执行,白白耗费了CPU的处理。因此可以考虑实现一个调度策略来解决这个问题。对于每个任务,我们可以定义这样一个结构:typedef struct{void (*fTask)(void
    发表于 03-09 15:59

    如何利用UCOS引发任务调度

    我看资料中的任务调度往往发生在程序延时中,程序释放CPU引发任务调度,但是我希望程序能够更快的运行,不想使用延时函数,有什么其他的方法开启任务
    发表于 10-24 04:36

    请问FreeRTOS是如何实现调度的?

    了stm32的官方例程,原理上的东西大致懂了,可在程序中是如何实现的呢,C语言障碍,没看懂。首先是调度函数,函数函数是如何执行的呢?如下图,新建任务后执行调度函数,为什么没用循环,
    发表于 07-30 07:40

    调度器的原理及其任务调度代码实现

    、超级循环2、时间片与时标3、调度算法介绍1)时间片轮转调度2)强制试调度4、注意事项所有任务的执行时间不能超过时标的时间三、任务
    发表于 02-17 07:07

    UCOSIII的任务管理与任务调度和切换简述

    就绪表7、任务调度和切换1、任务调度时间片轮转调度2、任务切换8、UCOSIII的
    发表于 02-18 06:14

    云计算环境中任务调度应用

    云计算环境中的任务调度问题一直是云计算研究的重点,任务调度的目的寻找最优的任务调度策略,以高效地
    发表于 11-02 17:30 3次下载
    云计算环境中<b class='flag-5'>任务</b><b class='flag-5'>调度</b>应用

    任务阈值调度算法

    针对当前云任务调度算法在密码云环境中无法实现任务实时处理的问题,提出一种基于滚动优化窗口的实时阈值调度方法。首先,将密钥调用环节融入密码任务
    发表于 11-24 17:08 5次下载
    云<b class='flag-5'>任务</b>阈值<b class='flag-5'>调度</b>算法

    异构多核处理器任务调度算法

    任务调度响应实时性方面表现优异,但却不适用于异构多核处理器环境。为此,提出一种高实时性任务调度算法HRSA。在Min-Min调度算法的基础上
    发表于 02-07 11:07 1次下载

    spring4.0如何整合Quartz实现任务调度详细资料和程序说明

    Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的
    发表于 05-06 18:23 1次下载
    spring4.0如何整合<b class='flag-5'>Quartz</b><b class='flag-5'>实现任务</b><b class='flag-5'>调度</b>详细资料和程序说明

    如何使用spring4.0整合Quartz实现动态任务调度的程序资料说明

    Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的
    发表于 04-26 18:26 0次下载
    如何使用spring4.0整合<b class='flag-5'>Quartz</b><b class='flag-5'>实现</b>动态<b class='flag-5'>任务</b><b class='flag-5'>调度</b>的程序资料说明

    DSP实时多任务调度的解决方案

    本文阐述了一个用于DSP的简洁而实用的实时多任务调度内核的实现方法。DSP由于其架构的特殊性,在任务调度方面与
    的头像 发表于 03-24 15:22 4063次阅读

    c语言实现任务调度

    二、原理1、超级循环2、时间片与时标3、调度算法介绍1)时间片轮转调度2)强制试调度4、注意事项所有任务的执行时间不能超过时标的时间三、任务
    发表于 12-22 18:51 8次下载
    c语言<b class='flag-5'>实现任务</b><b class='flag-5'>调度</b>器

    Quartz中编码中用到的几个对象

    在使用Quartz的时候,我们需要用到Quartz的几个对象:Job(任务),JobDetail(任务定义:使用JobDetail来定义定时任务
    的头像 发表于 04-12 10:50 254次阅读

    任务调度系统设计的核心逻辑

    Redis的读写性能极好,分布式锁也比Quartz数据库行级锁更轻量级。当然Redis锁也可以替换成Zookeeper锁,也是同样的机制。 在小型项目中,使用:定时任务框架(Quartz/Spring Schedule)和
    的头像 发表于 01-02 15:09 312次阅读
    <b class='flag-5'>任务</b><b class='flag-5'>调度</b>系统设计的核心逻辑