Quartz与SpringBoot的动态结合之一基本概念

作者: 妖s银眉 | 来源:发表于2016-07-20 18:24 被阅读1073次

Quartz简介

Quartz是OpenSymphony开源组织在Job scheduling领域又一个功能丰富的,开放源码的作业调度项目,完全基于java实现,可集成到几乎所有的Java应用程序中。Jobs可以是任何自定义的业务逻辑。Quartz可以用来创建简单或复杂的调度器,用来执行数十成百上千甚至上万个Jobs。

优势及概念

作为一个优秀的开源调度框架,Quartz 具有以下特点:

强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;

灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;

分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升。本文暂不讨论该部分内容

另外,作为 Spring 默认的调度框架,Quartz 很容易与 Spring 集成实现灵活可配置的调度功能。

下面是本文中用到的一些专用词汇,在此声明:

scheduler:

任务调度器

trigger:

触发器,用于定义任务调度时间规则

job:

任务,即被调度的任务

misfire:

错过的,指本来应该被执行但实际没有被执行的任务调度

key:

由名称(name)和分组(group)组成,将Job和Trigger注册到Scheduler时,需要为它们设置key

核心组件

1.核心组件关系图

Quartz 核心元素关系图(出自 http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/index.html)

2.核心组件逻辑关系

任务调度器(scheduler)在触发器(trigger)指定的时刻调度任务(job)。

3.组件工作过程

1).Scheduler在使用之前需要实例化。一般通过SchedulerFactory来创建一个实例。

SchedulerFactory sf=new StdSchedulerFactory();

Scheduler sched=sf.getScheduler();

StdSchedulerFactory创建出一个简单的调度器,采用RAMJobStore存储方式 ,将 trigger 和 job 存储在内存中。

2).创建一个任务用于执行特定业务。

JobDetail job = newJob(HelloJob.class).withIdentity("myJob", "group1").build();

其中HelloJob是自定义的实现Job接口业务类,是无状态的(stateless)的任务,可以被并行执行,即二次调度不受上次调度是否执行完毕影响。

3).创建一个触发器,用于指定在何时执行任务,此处使用CronTirgger。

CronTrigger trigger=newTrigger()

.withIdentity("trigger1","group1")

.withSchedule(cronSchedule("0/20 * * * * ?"))

.build();

CronTirgger 类似于 LINUX 上的任务调度命令 crontab,即利用一个包含 7 个字段的表达式来表示时间调度方式。例如,"0 15 10 * * ? *" 表示每天的 10:15AM 执行任务。对于涉及到星期和月份的调度,CronTirgger 是最适合的,甚至某些情况下是唯一选择。例如,"0 10 14 ? 3 WED" 表示三月份的每个星期三的下午 14:10PM 执行任务。

4)注册任务与触发器到任务调度器

scheduler.scheduleJob(job, trigger);

Key

将Job和Trigger注册到Scheduler时,可以为它们设置key,配置其身份属性。Job和Trigger的key(JobKey和TriggerKey)可以用于将Job和Trigger放到不同的分组(group)里,然后基于分组进行操作。同一个分组下的Job或Trigger的名称必须唯一,即一个Job或Trigger的key由名称(name)和分组(group)组成。

相关文章

网友评论

    本文标题:Quartz与SpringBoot的动态结合之一基本概念

    本文链接:https://www.haomeiwen.com/subject/hlbvjttx.html