Quartz是开源组织OpenSymphony的一个作业调度框架,采用多线程架构,可伸缩性强,可集群扩展。
Quartz提供的常用类:Scheduler, SchedulerFactory, Job, JobDetail, JobBuilder, Trigger, TriggerBuilder, ScheduleBuilder
UML类图如下:
Scheduler时Quartz调度程序的主要接口,维护一个JobDetails和Triggers的注册表,到触发时间时,调度程序将执行Job。
调度程序Scheduler实例通过SchedulerFactory工厂创建,有两个实现类DirectSchedulerFactory和StdSchedulerFactory,前者不写入持久化数据库,后者加载quartz.properties属性配置文件,将查找加载当前目录和org.quartz包。
任务是实现Job接口的一个类,实现方法execute(),可声明属性:
- @DisallowConcurrentExecution,同时只执行一个实例。
- @PersisJobDataAfterExecution,正常执行后将JobDataMap备份。
JobDetail将任务属性传递给Scheduler,通过JobBuilder创建,JobDataMap保存任务实例的状态信息。
触发器Trigger通过TriggerBuilder创建,结合ScheduleBuilder设置时间规则,可通过JobDataMap传递数据给Job。常用的两种触发器:
- SimpleTrigger:指定开始时间、结束时间、重复次数、执行间隔。
- CronTrigger:使用Cron表达式设置时间规则。
构建ScheduleBuilder设置时间规则时,可配置Misfire选项,指定执行失败熄火时的处理规则:
含义 | 支持ScheduleBuilder | |
IgnoreMisfires | 马上执行,比如整点9点失败,系统10:15启动,会马上执行9点10点的任务。 | SimpleSchedule CronScheduleBuilder CalendarIntervalScheduleBuilder DailyTimeIntervalScheduleBuilder |
FireNow | 立即再次触发 | SimpleSchedule |
NowWithExistingCount | 立即再次触发,不计入总次数。 | SimpleSchedule |
NowWithRemainingCount | 立即再次触发,计入总次数。 | SimpleSchedule |
NextWithExistingCount | 等待下次执行,不计入总次数。 | SimpleSchedule |
NextWithRemainingCount | 等待下次执行,计入总次数。 | SimpleSchedule |
DoNothing | 不做任何处理,执行下一次周期。 | CronScheduleBuilder CalendarIntervalScheduleBuilder DailyTimeIntervalScheduleBuilder |
FireAndProceed | 合并下一个周期,正常执行。比如整点9点10点失败,系统10:15启动,在11点合并执行一次。 | CronScheduleBuilder CalendarIntervalScheduleBuilder DailyTimeIntervalScheduleBuilder |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。