定时任务设计(二):Quartz

核心接口和类

Scheduler接口:调度器接口,包含任务的调度管理;

Job接口:自定义的“定时程序”实现此接口的
void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。

JobDetail类:具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。

JobDataMap类:用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.

Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。
Quertz中提供了两类触发器为:
- SimpleTrigger
简单的定时功能
- CronTrigger
使用表达式来描述定时功能,因此适用于比较复杂的定时描述,
例如每个月的最后一个周五,每周的周四等。

JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。

JobListener,TriggerListener接口:用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。

Quartz任务调度设计:

定时任务设计(二):Quartz_第1张图片

  • Job与Trigger解藕,实现N个任务和M个触发规则自由组合;

  • Scheduler扮演“指挥官”的角色,统筹调度。对触发规则进行全面的管理,例如优先级、错失触发、线程分配等等:

配置

默认加载顺序:
优先顺序 Classpath:quartz.properties –> org/quartz/quartz.properties (quartz lib)

#调度器名,默认名是QuartzScheduler,集群下要求相同
org.quartz.scheduler.instanceName = Scheduler1    
org.quartz.scheduler.instanceId = AUTO

#配置线程池
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#配置任务存储方式
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 
#或者,使用数据库存储,集群必须使用
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.maxMisfiresToHandleAtATime = 10

#漏发处理时间阈值
org.quartz.jobStore.misfireThreshold = 60000

#集群配置
org.quartz.jobStore.isClustered = true  org.quartz.jobStore.clusterCheckinInterval = 20000

集群

架构:

定时任务设计(二):Quartz_第2张图片

  • LB:谁先触发谁执行,并且一次只有一个scheduler触发。
  • 故障处理Fail-Over : 当一个scheduler失败后,其它的实例可以发现那些执行失败的Jobs,假如Job对应的JobDetail标记为recovery(属性”requests recovery”),那么该Job就会被其它的实例重新执行,否则对应的Job只会被释放等待下次被触发。

数据模型

定时任务设计(二):Quartz_第3张图片

主要表描述

定时任务设计(二):Quartz_第4张图片

线程模型

定时任务设计(二):Quartz_第5张图片

注意点:

  1. 不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒
  2. 不实现集群的实例不使用同一套表

你可能感兴趣的:(quartz,分布式,任务调度)