高级篇 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: 作业的分片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值