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 执行器根据任务上报结果进行后续处理(失败重试、执行结果归总等)