Xxl-Job执行器原理解析
本文最后更新于:2022年9月19日 早上
项目解析源码地址:xxl-job
xxl-job版本:2.3.0
Xxl-Job分为执行器、调度器。而我们平时的客户端就属于一个执行器,执行器启动的时候会自动注册到调度器上,然后调度器进行远程调度。
执行器初始化过程步骤如下
1 通过加了@Conguration注解的XxlJobConfig初始化,并生成beanName=xxlJobExecutor的Bean
2 注册的BeanName=XxlJobConfig,会进行初始化,步骤如下:
- 扫描所有bean,加载加了@XxlJob注解类,并记录在jobHandlerRepository
- 选择工厂类:GlueFactory 或 SpringGlueFactory
-- SpringGlueFactory会拦截当前实例属性 判断是否加了@Resource或@Autowired注解,如果存在就获取当前对应的bean实例,然后通过反射注入成员中
- 启动,其步骤如下:
-– 1 初始化存放执行日志目录文件 — 2 初始化执行者,管理客户端 — 3 初始化日志清除线程,一天执行一次,默认清除N天(可配置)前数据 — 4 初始化回调触发器线程,线程执行完会把数据回调调度器接口告诉他结果 — 5 初始化执行服务器,初始化netty服务器,并发客户端信息注册到调度器上
接下来对各个源码进行一定的解析
1 通过加了@Conguration注解的XxlJobConfig初始化,并生成beanName=xxlJobExecutor的Bean
1 |
|
2 注册的BeanName=XxlJobConfig,会进行初始化,步骤如下
1 |
|
上面我们对启动super.start()步骤来做具体的分析,其分析代码如下:
1 |
|
启动super.start() -> 初始化存放执行日志目录文件
1 |
|
启动super.start() -> 初始化执行者,管理客户端
-- 把调度管理器的地址写入adminBizList中
-- 启动super.start() -> 初始化日志清除线程
1 |
|
启动super.start() -> 初始化回调触发器线程
回调job执行结果给调度器,告诉调度器已执行完
1 |
|
启动super.start() ->初始化执行服务器
初始化netty服务器,并发客户端信息注册到调度器上
1 |
|
上面启动了nettyServer,并且对应的实现handler为EmbedHttpServerHandler,通过监听,最终调用如下代码:
-- 路径为:EmbedHttpServerHandler->channelRead0->process()->executorBiz.run(triggerParam)->ExecutorBizImpl#run()
1 |
|