高级篇 II: 作业的执行

上一篇中,提到createJobDetail 方法,通过LiteJob代理quartz中的Job。

因此,后续quartz定时调度执行作业,入口在LiteJob:

 

首先,进入getJobExecutor方法,发现这里使用了工厂模式,生成不同作业的executor:

 

各个executor的类间继承关系,如下:

子类都实现抽象类中的process方法

 

接着,进入execute方法,方法的大致逻辑如下:

显然,可以看到在抽象类中,定义了作业执行流程层面的一些逻辑,如执行前、执行后调用 作业监听器。

 

作业的执行,最终调用到的是各个作业类型对应的executor中的process方法:

simple类型作业的executor

process方法,直接就是调用SimpleJob接口中的execute方法

 

dataflow类型作业的executor

process方法中分两种情况:

(1)非流式处理时,最终只会调用DataFlowJob中的processData方法

(2)需要流式处理时,则是在streamingExecute方法中,前后依次调用 DataFlowJob中的 processData方法 和 processData方法

 

那么,再关注另外一个问题, 即 含有有多个分片时,作业是如何执行的?

下面的代码表明,多个分片时,是放到线程池中并发执行的(这里采用的 谷歌 guava的线程池,该线程池的相关内容,以后其它博文中再做阐述),并通过CountDownLath做同步。


下一部分,简单讲述下 高级篇 III: 作业的分片

猜你喜欢

转载自blog.csdn.net/baogang409/article/details/78491317
ii