quartz框架(七)-JobStore

在之前的博文中,博主已经写了关于Job的相关内容。本篇博文,博主将介绍JobStore相关的内容。

JobStore是存放Job和Trigger的地方。当我们调用Scheduler对象的scheduleJob时就会将其存入JobStore中,然后供quartzSchedulerThread使用。

因为我们需要被Scheduler调用的任务大多数并不是一次性的任务,而是需要被定时触发,或者某个时间点才能被触发的。因此我们需要一个容器来存储Job和Trigger的相关内容。

其次,quartz框架还有考虑到持久化存储的场景,比如说将对应的数据存放到数据库,这时候存放或者读取数据库里面的数据都需要有一个与之对应的容器。

JobStore接口中定义的方法太多,这里博主只列出一下比较重要的方法。接口定义如下所示:


public interface JobStore {

   //存储job和tigger
   void storeJobAndTrigger(JobDetail newJob, OperableTrigger newTrigger)
        throws ObjectAlreadyExistsException, JobPersistenceException;

   //获取下一次需要进行触发的触发器
   List acquireNextTriggers(long noLaterThan, int maxCount, long timeWindow)
        throws JobPersistenceException;

   //释放获取到的触发器
   void releaseAcquiredTrigger(OperableTrigger trigger);

   //触发器被触发
   List triggersFired(List triggers) throws JobPersistenceException;

   //触发器触发完成
   void triggeredJobComplete(OperableTrigger trigger, JobDetail jobDetail, CompletedExecutionInstruction triggerInstCode);
}

在quartz的默认配置中使用的就是RAMJobStore。顾名思义,RAMJobStore是基于内存来存储的Job相关数据,也就是在程序重启之后,对应的数据就会消失,并且它不支持集群,也就是说它不可以把需要调度的任务分配到多台机器上面进行执行。博主这里就以RAMJobStore为例,讲解一下RAMJobStore的相关实现。

总体来说,quartzSchedulerThread有设置idlewaitime时间。idlewaitime时间就是在这个空闲时间内如果没有接收到调度器发生变化的信号(sigLock锁的notify),它就会阻塞对应的时间(sigLock的wait(idlewaitime)方法)。因此quartzSchedulerThread需要提前获取到这个(now + idlewaitime)时间点内的trigger,否则会造成触发器失火的情况,并且它会一次性获取当前可用空闲线程个数的trigger。

acquireNextTriggers方法逻辑:

在JobStore中调用triggerWrapper相关的方法时(如triggersFired方法),如果发生了异常,则会调用该方法,将其重新放入timeTriggers中。

releaseAcquiredTrigger方法逻辑:

正常情况下,Job被执行完毕的时候,会通知JobStore执行该方法。

Original: https://www.cnblogs.com/chenhaoblog/p/16000062.html
Author: 幕友皎敖奔乾
Title: quartz框架(七)-JobStore

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711882/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    技术杂谈 2023年6月21日
    0110
  • Linux Ubuntu 下载&安装 MySQL

    1. 下载安装 下载&安装:一句搞定 sudo apt update sudo apt install mysql-server 查看版本信息 mysql –versio…

    技术杂谈 2023年7月11日
    097
  • 文档分享-Activiti 5.16 用户手册

    今天在翻看工作流相关的网页的时候,在开源中国上http://www.oschina.net/question/915507_149175发现activiti的中文文档:http:/…

    技术杂谈 2023年6月1日
    0110
  • 《玩态人生》重新学会玩

    前方高能警告,在您开始阅读时,请记住,这只是作者小鬼个人的价值观思考。如果看到一半发现严重与您的体系不同,发现不适。请坚决关掉,因为接下来写的内容,可能跟主流的价值观存在很多冲突的…

    技术杂谈 2023年6月21日
    077
  • 前端性能优化的七大手段

    前面的话 本文将详细介绍前端性能优化的七大手段,包括减少请求数量、减小资源大小、优化网络连接、优化资源加载、减少重绘回流、使用性能更好的API和构建优化 【合并】 如果不进行文件合…

    技术杂谈 2023年5月31日
    093
  • 全局重置 table 的 pageSizeOptions

    场景: 用户数据量较大,默认的分页不适合,需要实现重置 思路: Table 组件 pagination 与 Pagination 的是一致的 方案: 根目录 src/app.tsx…

    技术杂谈 2023年5月31日
    096
  • [学习笔记]Java常用包装类

    在实际开发过程中,可能需要用到内置数据类型的对象。Java为每个内置数据类型提供对应的包装类。 Number类的子类 所有的数值类型的包装类都是抽象类Number的子类; Inte…

    技术杂谈 2023年7月24日
    074
  • Python 的排序方法 sort 和 sorted 的区别

    使用 sort() 或内建函数 sorted() 对列表进行排序。它们之间的区别有两点: sort() 方法是对原列表进行操作,而 sorted() 方法会返回一个新列表,不是在原…

    技术杂谈 2023年6月21日
    0103
  • B站(bilibili) 等级升级脚本-云函数版

    前言 云函数运行会莫名其妙的报错(我也不知道为什么,我这边测试有时候报错,有时候不会),并非代码有错,建议在本地运行。 由于之前写的代码有些bug,后面又又又又又又又更新了。 最后…

    技术杂谈 2023年6月21日
    093
  • crash命令 —— ascii

    参考:https://crash-utility.github.io/help_pages/ascii.html 用法: 将一串16进制数转换为对应的ascii码: ascii &…

    技术杂谈 2023年5月30日
    096
  • 学习

    1.1、参考博客 参考的教程如下: Original: https://www.cnblogs.com/agui125/p/16032402.htmlAuthor: 风御之举Tit…

    技术杂谈 2023年6月21日
    087
  • 【转】php-fpm 启动参数及重要配置详解

    request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起file_get_contents的资源问题。 如果file_get_contents请…

    技术杂谈 2023年6月1日
    0109
  • 有点长的博客:Redis不是只有get set那么简单

    我以前还没接触Redis的时候,听到大数据组的小伙伴在讨论Redis,觉得这东西好高端,要是哪天我们组也可以使用下Redis就好了,好长一段时间后,我们项目中终于引入了Redis这…

    技术杂谈 2023年7月25日
    0104
  • 时空的乐章

    广义相对论之前,时空仿佛是一个舞台,物理过程像戏剧一样千变万化,舞台却是不变的,广义相对论首次将时空变成了戏剧的一部分,变成了一个动力学概念,时空不再是不变的了,而在物理学上,几乎…

    技术杂谈 2023年5月31日
    087
  • Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

    前言 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错。而Python在自动化办公方面具有极大的优 势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定…

    技术杂谈 2023年6月21日
    090
  • 一篇文章带你全面读懂Android Backup

    前言 手机等智能设备是现代生活中的重要角色,我们会在这些智能设备上做登录账户,设置偏好,拍摄照片,保存联系人等日常操作。这些数据耗费了我们很多时间和精力,对我们而言极为重要。 如果…

    技术杂谈 2023年7月11日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球