Quartz调度框架-批处理任务

Quartz核心要素有Scheduler、Trigger、Job、JobDetail,其中trigger和job、jobDetail为元数据,而Scheduler为实际进行调度的控制器。

  • Trigger

Trigger用于定义调度任务的时间规则,在Quartz中主要有四种类型的Trigger:SimpleTrigger、CronTrigger、DataIntervalTrigger和NthIncludedTrigger。

  • Job&Jodetail

Quartz将任务分为Job、JobDetail两部分,其中Job用来定义任务的执行逻辑,而JobDetail用来描述Job的定义(例如Job接口的实现类以及其他相关的静态信息)。对Quartz而言,主要有两种类型的Job,StateLessJob、StateFulJob

  • Scheduler

实际执行调度逻辑的控制器,Quartz提供了DirectSchedulerFactory和StdSchedulerFactory等工厂类,用于支持Scheduler相关对象的产生。

 

来自 <Quartz原理解密 - Dorae - 博客园>

从上图可以知道:

1、从工厂获取Scheduler调度器

2、把作业JobDetail和触发时间放进调度器Scheduler里面

3、调度器Scheduler启动后,自然而然的会去处理Job,因为JobDetail里面描述了Job的实现类是哪一个。

4、从上面元素可以知道Job定义执行逻辑。也就是我们要在Job.execute中完成怎样调用业务代码地方.

 

关键问题:

1、调度进程什么时候启动?

在调用scheduler.start()之后,QuartzSchedulerThreadpause状态设为false,通知调度线程执行任务,此后调度线程不停的从JobStore中去取即将触发的任务。

 

2、怎么判断任务开始执行的时间点,以及在哪里判断?

有调度器QuartzSchedulerThread获取30秒内的触发器Trigger,等到时间误差小于2等于ms开始执行JOb。即有scheduleer.start()启动调度线程,然后调度线程去获取已保存的jobdetail和trigger判断是否可执行,可以就执行jobdetail里描述的job实现类的execute方法

 

3、时间表达式怎么解析?

有trigger对象负责时间表达式的解析,解析结果是下一次执行时间的毫秒数。

 

4job的execute方法有谁来调用?

由框架的JobRunShell 来完成调用,属于调度框架的内置逻辑,我们只需集成Job接口实现execute方法即可。

来自 <Quartz原理解析 - 姬野 - 博客园>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值