QUARTZ 简单介绍

一、简介

 QUARTZ 是一个完全由java开发的开源的任务日程管理系统,就是在一个预定的时间负责执行(通知)其他软件组件系统。

二、定时器的分类

定时器一共分为五类,分别是:SimpleTrigger 、CronTirgger、DateIntervalTrigger、NthIncludedDayTrigger和Calendar 类。

其中最常用的有两个:SimpleTrigger、CronTrigger。

注意:这里的Calender类指的是org.quartz.Calendar

SimpleTrigger:它是用来触发只需要执行一次或者在给定时间触发并且重复N次 且每次延后一定时间的任务

SimpleTrigger 包含以下几个特点:

开始时间

结束时间:会重写重复次数,创建一个触发器如果时间一到即使规定的执行次数没有执行完也不会继续执行。

重复次数:可以为整数,0,常量 SimpleTrigger.REPEAT_INDEFINITELY

重复执行的时间间隔:可以为 0 或者用 long 表示毫秒数。

SimpleTrigger的熄火指令:


REPEAT_INDEFINITELY - 用于表示触发器的“重复计数”是不确定的。或者换句话说,触发应该不断重复直到触发的结尾时间戳
MISFIRE_INSTRUCTION_FIRE_NOW - 如果熄火,该指令会告诉Quartz应该马上再次触发
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT - 如果熄火,该指令会告诉Quartz马上执行并计数累计到已经执行的次数当中去,如果结束时间已经过了,则不会再执行。
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT - 如果熄火,会告诉Quartz想要现在就执行一次(即使现在不是它原本计划的触发时间)
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT - 如果熄火,会告诉Quartz在下一次执行时间再次开始执行

CronTrigger基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更加常用,使用它时需要用到corn表达式。

Cron表达式:它是用于配制CronTrigger实例的。Cron表达式实际上是由七个子表达式组成的字符串,它描述了不同的调度细节,这七个子表达式为:秒 、分 、时 、月中的天、月、周中的天、年(可选项)。

Cron表达式的规则说明

所有字段都有一组可以指定的有效值。

  • 数字 0 到 59 可以表示秒和分
  • 0到23可以表示小时
  • 月中的天可以使用1到31的数值, 但是你要注意该月的天数!
  • 月用0 到 11之间的数值表示, 或者使用JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 和 DEC来表示1-12月
  • 一周中的天试用1到7表示 (1 表示 周日) 或者使用 SUN, MON, TUE, WED, THU, FRI 和 SAT

CronTrigger 的熄火指令:

MISFIRE_INSTRUCTION_FIRE_ONCE_NOW - 如果熄火,该指令会告诉Quartz希望马上再次触发

MISFIRE_INSTRUCTION_DO_NOTHING - 如果熄火,该指令会告诉Quartz下一次执行时间到来时再执行,并不想马上执行

三、存储方式

存储方式有以下两种:

  1. RAMJobStore:它是使用最简单也是最高效的 jobStore , 它保存数据在 RAM 中,它虽然速度快但是它不具备持久保存job                            和 trigger 的能力,也就是说当你应用结束时,你所有的数据将会全部丢失。
  2. JDBCJobStore :它以 jdbc 的方式将数据存储在数据库中,它的速度没有 RAMJobStore 快,它几乎适用于所有数据库,                                广泛用于 Oracle, PostgreSQL, MySQL, MS SQLServer, HSQLDB, 和DB2。使用JDBCJobStore之前你                                必须首先创建一系列Quartz要使用的表。

四、Quartz 的表关系及表说明

五、表说明:

表名称说明
qrtz_blob_triggers 以Blob 类型存储的触发器
qrtz_calendars存放日历信息, quartz可配置一个日历来指定一个时间范围
qrtz_cron_triggers存放cron类型的触发器
qrtz_fired_triggers存放已触发的触发器
qrtz_job_details存放一个jobDetail信息
qrtz_job_listenersjob**监听器**
qrtz_locks存储程序的悲观锁的信息(假如使用了悲观锁)
.qrtz_paused_trigger_graps存放暂停掉的触发器
.qrtz_scheduler_state调度器状态
qrtz_simple_triggers简单触发器的信息
qrtz_trigger_listeners触发器监听器
.qrtz_triggers触发器的基本信息

注意:cron方式需要用到的4张数据表: 
               qrtz_triggers,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details。

六、JDBC插入表顺序

主要的JDBC操作类,执行sql顺序。 
Simple_trigger :插入顺序 
qrtz_job_details —> qrtz_triggers —> qrtz_simple_triggers 
qrtz_fired_triggers 
Cron_Trigger:插入顺序 
qrtz_job_details —> qrtz_triggers —> qrtz_cron_triggers 
qrtz_fired_triggers

七、quartz重要的几个类说明


Scheduler - 用于与调度程序交互的主程序接口。
Job - 我们预先定义的希望在未来时间能被调度程序执行的任务类
JobDetail - 使用JobDetail来定义定时任务的实例。
Trigger - 触发器,表明任务在什么时候会执行。定义了一个已经被安排的任务将会在什么时候执行的时间条件。
JobBuilder -用于声明一个任务实例,也可以定义关于该任务的详情比如任务名、组名等,这个声明的实例将会作为一个实际执行的任务。
TriggerBuilder - 触发器创建器,用于创建触发器trigger实例。

八、常用的 cron 表达式举例

表达式说明
0 0 12 * * ?每天12点执行
0 15 10 ? * * 每天的10:15执行
0 15 10 * * ?每天的10:15执行
0 15 10 * * ? *每天的10:15执行
0 15 10 * * ? 20182018年每天的10:15执行
0 * 14 * * ?每天的14:00到14:59期间每分钟执行
0 0/5 14 * * ?每天的14:00到14:55每隔5分钟执行
0 0/5 14,18 * * ?每天的14:00到14:55每隔5分钟执行和18:00到18:55每隔5分钟执行
0 0-5 14 * * ?每天的14:00到14:05执行
0 10,44 14 ? 3 WED三月的每一个周三的14:10和14:44执行
0 15 10 ? * MON-FRI工作日每天的10:15:00执行
0 15 10 15 * ?每个月的第15天的10:15:00执行
0 15 10 L * ?每个月最后一天的10:15:00执行
0 15 10 ? * 6L  每个月最后一个周五的10:15:00执行
0 15 10 ? * 6L 2002-20052002, 2003, 2004, 和2005年每个月最后一个周五的10:15:00执行
0 15 10 ? * 6#3每个月的第三个周五的10:15:00执行
0 0 12 1/5 * ?每个月的第一天的12:00:00开始执行,每隔5天间隔执行
0 11 11 11 11 ?每年的11月11日11:11:00执行

在线 cron 表达式生成器 

http://cron.qqe2.com/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值