当前位置 博文首页 > 少年时未觉悟 ,觉悟时不再年少,还危机四伏!:Azkaban 源码导

    少年时未觉悟 ,觉悟时不再年少,还危机四伏!:Azkaban 源码导

    作者:[db:作者] 时间:2021-07-16 15:31

    背景

    下载最新版本的 Azkaban 源码 4.0.0 ,导入 IDEA,源码中会有一些编译错误,本文整理任务调度框架 Azkaban 源码导入的流程 。

    Azkaban 是使用 gradle 构建的多模块项目,而我本地以前安裝过 gradle ,正好直接用。IDEA 的 open 菜单选中项目的 build.gradle 文件,然后作为项目导入。

    修改 IDEA gradle 配置

    源码导入后,等待 build 完成,默认 IDEA 配置导入 gradle 项目时报错:

    java.lang.AssertionError
    	at org.jetbrains.plugins.gradle.service.project.BaseGradleProjectResolverExtension.createModule(BaseGradleProjectResolverExtension.java:154)
    	at org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension.createModule(AbstractProjectResolverExtension.java:86)
    	at org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver.createModule
    
    

    解决办法,修改 Gradle 配置,使用本地 Gradle:
    在这里插入图片描述
    Reimport 项目,等待编译完成。

    web.server 引用 User 类找不到

    这次编译完成后,web.server 模块报错,User 类找不到定义。

    解决办法:到该项目下执行 gradle build -x test 命令,等待编译完成:
    在这里插入图片描述
    编译完成后,该模块下会生成这个类,本质是利用简单的 XML 配置生成一个 Java 类:
    在这里插入图片描述

    启示录

    接下来就可以愉快地分析源码啦,比较神奇的是,它的调度过程既支持 Quartz ,也有一个内置的时间调度模块。

    XXL-Job 为了摆脱 Quartz 也实现了自己 TimeWheel ,它们的思路是一样的:轮询调度任务的执行时间和当前系统时间,对比是否匹配。

    搞清楚 Azkaban 的 BasicTimeChecker 类图结构后,自己造轮子写一个基于 Cron 表达式的时间检查工具也不是问题。

    cs