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 執行器根據任務上報結果進行后續處理(失敗重試、執行結果歸總等)
