Quartz调度器学习--基本概念

简介:

1,触发器有一个startTime 和 endTime 属性,startTime 规定Trigger何时生效,endTime规定Trigger何时失效。

2,Trigger的优先级:Quartz管理着一个线程池,用来进行作业的执行。当可用线程数目少于目前待调度的作业数目时,哪个作业的Trigger优先级高,该作业就会优先分配 work thread 执行。当然,作业的Trigger优先级的比较只在具有相同调度时间的作业之间比较,如所有10点钟执行的作业;而9点钟执行的作业的Trigger优先级尽管低于10点钟作业的Trigger优先级。显然,9点钟的作业还是先执行的。

 

3,Misfire Instructions----错过作业触发时机时怎么办?

Quartz中有一个默认的处理机制--"smart policy"机制。同时,你也可以在为作业配置Triggers时,明确指定作业的misfire instructions。当使用“smart policy”机制时,对于SimpleTrigger而言,它会动态地选择一个合适的触发机制,SimpleTrigger.updateAfterMisfire()方法解释了此种情况下如何触发作业。

SimpleTrigger以常量的形式预定义了一些触发机制,这些机制如下:

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT

 

4,Quartz提供了一个Calendar对象(不是java.util.Calendar)来更加精细化地设置作业的触发条件。Calendar主要的用途就是:在需要重复地调度作业时,排除某些特殊的日期(比如周末时不执行作业)。

 

5,如何构造一个Trigger,Trigger监听器能监听什么?

Trigger的构造主要牵涉到三个类:TriggerBuilder、SimpleScheduleBuilder、DateBuilder。通过静态导入,可以以一种DSL语言风格形式来编写代码。Trigger监听器可以监听Trigger在指定的时间被触发了,或者未被触发。也可监听Trigger已经触发“完毕”。

 

6,如何创建监听器,如何注册监听器?

创建Trigger监听器:implements TriggerListener 接口或者继承TriggerListenerSupport类。implements TriggerListener 接口需要实现接口中定义的所有的方法,而继承TriggerListenerSupport类只需要重写(Override)自己感兴趣的方法。同理创建Job监听器。

监听器的注册需要ListenerManager类来管理注册的监听器,并需要Matcher类来匹配在事件发生时,是哪个Job执行需要执行何种操作。

 

7,调度监听器--SchedulerListener

调度器监听器监听的事件包括:Job/Trigger的执行或触发、Job/Trigger的删除、通知调度器即将关闭以及调度器本身出错。

 

8,作业的存储--RAMJobStore 和 JDBCJobStore

RAMJobStore 把整个作业存储在内存中,作业运行完成后,就被删除了。

JDBCJobStore 将作业存储在数据库中,在使用JDBCJobStore之前,必须先配置好数据库,并创建一系列的数据库表来存储作业的相关信息。

在Quartz安装包的"docs/dbTables"目录下已经有相关的数据库操作脚本来创建这些表了,只需要修改一下符合自己安装的数据库即可。

本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/4903417.html,如需转载请自行联系原作者

相关文章
|
8月前
|
消息中间件 安全 Java
一起来探究@Schedule定时任务在分布式产生的问题
一起来探究@Schedule定时任务在分布式产生的问题
419 0
|
Java 调度
quartz(一)基础篇
quartz(一)基础篇
86 0
|
存储 开发框架 Java
分布式定时任务框架Quartz总结和实践(1)
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。
206 0
|
存储 Oracle Java
如何使用Quartz框架来实现任务调度?
如何使用Quartz框架来实现任务调度?
118 0
|
NoSQL Java 数据处理
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
477 0
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
|
存储 运维 Java
分布式定时任务-QuartzJava编程
分布式定时任务-QuartzJava编程
分布式定时任务-QuartzJava编程
|
XML 缓存 Java
通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载(上)
最近的新项目和数据同步相关,有定时调度的需求。之前一直有使用过Quartz、XXL-Job、Easy Scheduler等调度框架,后来越发觉得这些框架太重量级了,于是想到了Spring内置的Scheduling模块。而原生的Scheduling模块只是内存态的调度模块,不支持任务的持久化或者配置(配置任务通过@Scheduled注解进行硬编码,不能抽离到类之外),因此考虑理解Scheduling模块的底层原理,并且基于此造一个简单的轮子,使之支持调度任务配置:通过配置文件或者JDBC数据源。
535 1
通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载(上)
|
存储 Java 调度
这种方式整合Quartz你见过吗?
`Quartz`是一款优秀的任务调度框架,支持内存、JDBC的形式来存储未执行的任务列表,支持多个任务节点同时执行任务,支持任务漂移到不同的节点执行。
Quartz - 基础篇(上)
Quartz - 基础篇(上)
122 0
Quartz - 基础篇(上)
|
Java 应用服务中间件
Quartz - 基础篇(下)
Quartz - 基础篇(下)
176 0
Quartz - 基础篇(下)

热门文章

最新文章

下一篇
开通oss服务