上一篇中,提到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做同步。