xxl-job调度执行流程及源码解析

项目地址github:

https://github.com/xuxueli/xxl-job

项目目录介绍:

xxl-job-admin:调度中心(server端启动项目包括页面)
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适执行器)
xxl-job-executor-sample-springboot:Springboot 版本管理执行器
xxl-job-executor-sample-frameless:无框架版本


全文目录:

1.架构图
2.xxl-job-admin 调度中心源码解析及相关数据结构分析
3.快慢线程池JobTriggerPoolHelper源码解析
4.任务依赖解析

在这里插入图片描述

1.xxl-job-admin 调度中心

Springboot启动类:src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java

启动后调用XxlJobAdminConfig类,初始化XxlJobScheduler类

@Component
public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
   
    private static XxlJobAdminConfig adminConfig = null;
    public static XxlJobAdminConfig getAdminConfig() {
   
        return adminConfig;
    }
    // ---------------------- XxlJobScheduler ----------------------
    private XxlJobScheduler xxlJobScheduler;
    @Override
    public void afterPropertiesSet() throws Exception {
   
        adminConfig = this;
        xxlJobScheduler = new XxlJobScheduler();
        xxlJobScheduler.init();"
    }
    @Override
    public void destroy() throws Exception {
   
        xxlJobScheduler.destroy();
    }

初始化XxlJobScheduler

public class XxlJobScheduler  {
   
    private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class);
    public void init() throws Exception {
   
        // init i18n
        initI18n();
        // 初始化快、慢线程池触发器  调用XxlJobTrigger
        JobTriggerPoolHelper.toStart();
        // admin registry monitor run注册监控器线程启动
        JobRegistryHelper.getInstance().start();
        // admin fail-monitor run 失败监控线程启动
        JobFailMonitorHelper.getInstance().start();
        // admin lose-monitor run ( depend on JobTriggerPoolHelper )回调监控线程启动
        JobCompleteHelper.getInstance().start();
        // admin log report start
        JobLogReportHelper.getInstance().start();
        // start-schedule  ( depend on JobTriggerPoolHelper )作业调度初始化
        JobScheduleHelper.getInstance().start();
        logger.info(">>>>>>>>> init xxl-job admin success.。。");
    }
   ......
)
重点分析 JobScheduleHelper 作业调度类
  1. 使用Map<Integer, List<Integer>> 的数据结构存储将要执行的任务清单,其中Integer的范围为0-60,list中存储将要执行的JobID
  2. 使用scheduleThread线程扫描mysql中将要执行的调度清单
  3. 使用ringThread线程执行第一步map中的执行清单
执行流程图如下:

在这里插入图片描述

scheduleThread线程详细代码如下:

1、 从数据库中查询出下次执行时间小于等于当前时间+5s的所有执行任务列表

//悲观锁
preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
// 1、pre read  查询出下次执行时间小于等于当前时间+5s的执行任务列表
long nowTime =
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值