【Quartz】基本原理
1 核心概念
1.1 核心元素
(1)Scheduler
任务调度器,是Quartz框架的核心,负责管理其他组件。
(2)Trigger
触发器,用于定义任务调度的时间规则,有SimpleTrigger、CronTrigger、DateIntervalTrigger和NthIncludedDayTrigger。
trigger还有一个重要的属性misfire;如果scheduler关闭了,或者Quartz线程池中没有可用的线程来执行job,此时持久性的trigger就会错过(miss)其触发时间,即错过触发(misfire)。不同类型的trigger,有不同的misfire机制。它们默认都使用“智能机制(smart policy)”,即根据trigger的类型和配置动态调整行为。当scheduler启动的时候,查询所有错过触发(misfire)的持久性trigger,然后根据它们各自的misfire机制更新trigger的信息。
(3)Job
任务,即要被执行的任务。作业是一个执行任务的简单Java类,只需你实现org.quartz.Job接口并且在出现严重错误情况下抛出JobExecutionException异常即可。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。
Job接口包含唯一的一个方法execute(),作业从这里开始执行。一旦实现了Job接口和execute()方法,当Quartz确定该是作业运行的时候,它将调用你的作业。Execute()方法内就完全是你要做的事情。
主要有两种类型的 job:无状态的(stateless)和有状态的(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。有状态作业在每次执行时只有一个实例,每次执行时会查看JobDataMap的状态改变。Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。
2 数据存储
作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数。Quartz通过一个称之为作业存储(JobStore)的概念来做作业存储和管理。 Quartz 中有两种存储方式:
(1)RAMJobStore
使用内存来持久化调度程序信息。优点是容易配置、构造和运行。缺点是当应用程序停止运行时,所有调度信息将被丢失。
(2)JobStoreSupport
通过JDBC存储数据到数据库中。quartz集群是通过数据库表来感知其他的应用的,各个节点之间并没有直接的通信。只有使用持久的JobStore才能完成Quartz集群。有两种类型:
· JobStoreTX:自己控制事务时使用
· JobStoreCMT:容器控制事务时使用
数据库表有:
|
Table name |
Description |
|
QRTZ_CALENDARS |
存储Quartz的Calendar信息 |
|
QRTZ_CRON_TRIGGERS |
存储CronTrigger,包括Cron表达式和时区信息 |
|
QRTZ_FIRED_TRIGGERS |
存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息 |
|
QRTZ_PAUSED_TRIGGER_GRPS |
存储已暂停的Trigger组的信息 |
|
QRTZ_SCHEDULER_STATE |
存储少量的有关Scheduler的状态信息,和别的Scheduler实例 |
|
QRTZ_LOCKS |
存储程序的悲观锁的信息 |
|
QRTZ_JOB_DETAILS |
存储每一个已配置的Job的详细信息 |
|
QRTZ_SIMPLE_TRIGGERS |
存储简单的Trigger,包括重复次数、间隔、以及已触的次数 |
|
QRTZ_BLOG_TRIGGERS |
Trigger作为Blob类型存储 |
|
QRTZ_TRIGGERS |
存储已配置的Trigger的信息 |
|
QRTZ_SIMPROP_TRIGGERS |
本文也参考了https://blog.csdn.net/lkl_csdn/article/details/73613033和https://blog.csdn.net/guolong1983811/article/details/51501346,谢谢两位作者。
【Quartz】基本原理的更多相关文章
- Quartz原理解密
Quartz原理解密 Author: Dorae Date:2018年7月17日15:55:02 转载请注明出处 一.quartz概述 quartz是一个用java实现的开源任务调度框架,可以用来创建 ...
- quartz (从原理到应用)详解篇(转)
一.Quartz 基本介绍 1.1 Quartz 概述 1.2 Quartz特点 1.3 Quartz 集群配置 二.Quartz 原理及流程 2.1 quartz基本原理 2.2 quartz启动流 ...
- 定时组件quartz系列<二>quartz的集群原理
1.基本信息: Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2Se和J2EE应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它 来为执行一个作业而创建简单的或 ...
- 浅析Quartz的集群配置
浅析Quartz的集群配置(一) 收藏人:Rozdy 2015-01-13 | 阅:1 转:22 | 来源 | 分享 1 基本信息 摘要:Quar ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一
前言 我从Quartz2.0开始使用,并对其进行了封装了界面,可以参考 http://www.cnblogs.com/ymnets/p/5065154.html 最近拿出来进行了优化,并升级到最新版, ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
随机推荐
- Cookie、Session、Token
一.发展史 .最初.Web基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加相应,尤其是我不用记住是谁刚刚发了H ...
- c++ template 判断是否为类类型
/* The following code example is taken from the book * "C++ Templates - The Complete Guide" ...
- 一起做RGB-D SLAM(8) (关于调试与补充内容)
“一起做”系列完结后,我收到不少同学给我的反馈.他们提了一些在程序编译/运行过程中的问题.我把它们汇总起来,组成了这个“补充篇”.你也可以看成是一个Q&A. Q: OpenCV的版本?A: 我 ...
- Class 'App\Http\Controllers\DB' not found and I also cannot use a new Model
使用laravel的db插入数据 DB::table('tags')->insert( ['name'=>'test'] ); 报错Class 'App\Http\Controllers\ ...
- kalilinux、parrotsecos没有声音
Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下: (1)在终端执行命令:systemctl --user enable pulseaudio (2)在/ ...
- SpringMVC源码解析 - HandlerAdapter - HandlerMethodArgumentResolver
HandlerMethodArgumentResolver主要负责执行handler前参数准备工作. 看个例子,红色部分的id初始化,填充值就是它干的活: @RequestMapping(value ...
- Tomcat项目部署问题记录
Tomcat项目部署问题记录 1. -bash: ./startup.sh: Permission denied 问题: 新装tomcat后,执行启动命令会出现 -bash: ./startup.sh ...
- 咏南中间件当作WEB SERVER使用方法
咏南中间件当作WEB SERVER使用方法 1)开启咏南中间件 2)浏览器打开http://localhost:5566/web?page=echo.html
- Sqler-Monitor
针对Sqler Monitor 功能做了整理 ##SqlServices ## Cluster. Alwayson Single ##Replicaion ##: 1:undelivedcmds mo ...
- 深入CSS属性(九):z-index
如果你不是一名csser新手,想必你对z-index的用法应该有个大致的了解了吧,z-index可以控制定位元素在垂直于显示屏方向(Z 轴)上的堆叠顺序,本文不去讲述基本的API如何使用,而是去更深入 ...