Quartz 定时任务设计

mac2024-06-25  71

核心接口和类

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任务调度设计:

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

集群

架构:

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

数据模型

主要表描述

线程模型

注意点:

不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒不实现集群的实例不使用同一套表
最新回复(0)