xxl-job源码解析

1、xxl-job架构图

2、调度器源码解析

2.1 代码包说明

 contorller包:用于处理控制台相关请求;一般情况下,控制台中的操作只修改数据库,实际任务触发等还是由后台线程处理

service包:controller业务层代码

dao包:数据库处理

core包:核心包,用于线程初始化、执行器扫描、任务触发、告警、日志处理等

resource包:基础参数配置(application.properties)、数据库mapper.xml、前端代码

2.2 项目加载后台线程启动流程

2.2.1:初始化core/conf包下的bean:XxlJobAdminConfig,将application.properties包中的配置读取到内存中

2.2.2:配置加载完成后,初始化core/scheduler包下的类XxlJobScheduler,调用其init方法

2.2.3:XxlJobScheduler中的init方法

initI18n()  初始化语言配置(application.properties中的xxl.job.i18n)

JobTriggerPoolHelper.toStart(); 配置任务触发线程池

JobRegistryHelper.getInstance().start(); 执行器管理:及时新增30s内新注册的执行器,清除90s内未再次注册的执行器(默认心跳保活时间30s)

JobFailMonitorHelper.getInstance().start(); 任务失败重试处理

JobCompleteHelper.getInstance().start();  执行器执行任务10min内没有给出结果回复,终止该任务

JobLogReportHelper.getInstance().start(); 任务执行状态归总,用于后台管理”运行报表"数据显示;同时,如果日志到达清除时间,则清除日志(清除数据库中的日志)

JobScheduleHelper.getInstance().start(); 核心中的核心,用于任务触发

 3、执行器源码解析(示例代码)

3.1代码包说明

core.config包:XxlJobConfig类用于将application.properties中的基础配置参数读取到内存中

service.jobhandler包:SampleXxlJob类用于创建执行任务,要执行的任务上必须加上@XxlJob注解

resource:基础参数配置

3.2、项目启动后线程加载流程

3.2.1 项目启动后,XxlJobConfig将基础配置参数加载到内存中,同时初始化bean:XxlJobSpringExecutor

3.2.2 XxlJobSpringExecutor继承了SmartInitializingSingleton类,会在所有bean实例化完成后,执行afterSingletonsInstantiated方法

3.2.3:initJobHandlerMethodRepository(applicationContext); 将所有加了@XxlJob注解的方法,用反射的方式提取出来,统一存储起来

3.2.4 调用父类start方法:

3.2.4.1 XxlJobFileAppender.initLogPath(logPath); 初始化配置的日志打印信息;任务执行日志,与logback无关,指application.properties中配置的xxl.job.executor.logpath

3.2.4.2 initAdminBizList(adminAddresses, accessToken); 初始化配置的调度器信息

3.2.4.3 JobLogFileCleanThread.getInstance().start(logRetentionDays); 日志清理,1天清理一次,按照配置的日志清理时间进行清理

3.2.4.4 TriggerCallbackThread.getInstance().start();  任务执行结果上报

3.2.4.5 initEmbedServer(address, ip, port, appname, accessToken); 开启nettyServer服务,时刻等待调度中心的任务通知,然后向调度器发起注册

4、一次简单的任务触发执行流程

4.1 调度器doTrigger进行任务触发,将任务执行指令发送给执行器

4.2 执行器接收到任务执行指令后,将任务存储到triggerQueue中

4.3 jobThread(EmbedServer启动ExecutorBizImpl,ExecutorBizImpl中启动jobThread)从triggerQueue取出任务执行,执行过程中将日志信息保存到callBackQueue中

4.4 执行器回调线程TriggerCallbackThread从callBackQueue取出任务执行结果上报到调度器

4.5 执行器根据任务上报结果进行后续处理(失败重试、执行结果归总等)

原文地址:https://www.cnblogs.com/hanwenbo/p/14323024.html