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,如需转载请自行联系原作者

相关文章
|
6月前
|
消息中间件 安全 Java
一起来探究@Schedule定时任务在分布式产生的问题
一起来探究@Schedule定时任务在分布式产生的问题
388 0
|
Java API 调度
ThreadPoolTaskScheduler轻量级多线程定时任务框架
面对一些小的功能需求点,如果需要非常灵活的进行处理定时任务处理,但是又因为你的需求需要使用到页面进行定时任务配置,显然使用Spring注解定时任务,无法满足你,这时你想到了xxl-job 或者 quezy等定时任务框架,但是过于繁琐,可能成本较大。那么本文将要解决你的问题
2205 0
|
存储 Oracle Java
如何使用Quartz框架来实现任务调度?
如何使用Quartz框架来实现任务调度?
105 0
|
开发框架 Java Linux
Quartz-任务调度概述及Quartz(2.2.X)快速入门
Quartz-任务调度概述及Quartz(2.2.X)快速入门
195 0
|
NoSQL Java 数据处理
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
457 0
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
|
存储 Java 调度
这种方式整合Quartz你见过吗?
`Quartz`是一款优秀的任务调度框架,支持内存、JDBC的形式来存储未执行的任务列表,支持多个任务节点同时执行任务,支持任务漂移到不同的节点执行。
Quartz - 基础篇(上)
Quartz - 基础篇(上)
116 0
Quartz - 基础篇(上)
|
存储 Java 数据库连接
Quartz:任务调度实现原理
Quartz:任务调度实现原理
1279 0
Quartz:任务调度实现原理
Quartz3定时任务学习之异步调度器
Quartz3定时任务学习之异步调度器 Quartz3与Quartz2的主要区别有两点: 1,Quartz3将它的资源类库拆的更细了,比如,想使用Quartz3开发,最少要引用Quartz,Quartz.Jobs,Quartz.Plugins这三个类库。 2,Quartz3整体上使用的是异步创建实例,所以我们使用时就必须要async,await的语法。 下面我们用Quartz3来做一个任务调度。
Quartz3定时任务学习之异步调度器
|
Java 调度 Spring
SpringBoot从入门到精通(三十五)使用@Scheduled实现多线程定时任务
默认情况下,Spring Boot定时任务是按单线程方式执行的,也就是说,如果同一时刻有两个定时任务需要执行,那么只能在一个定时任务完成之后再执行下一个。如果只有一个定时任务,这样做肯定没问题;当定时任务增多时,如果一个任务被阻塞,则会导致其他任务无法正常执行。要解决这个问题,需要配置任务调度线程池。
SpringBoot从入门到精通(三十五)使用@Scheduled实现多线程定时任务