当前位置 博文首页 > 少年时未觉悟 ,觉悟时不再年少,还危机四伏!:Azkaban 源码导
下载最新版本的 Azkaban 源码 4.0.0 ,导入 IDEA,源码中会有一些编译错误,本文整理任务调度框架 Azkaban 源码导入的流程 。
Azkaban 是使用 gradle 构建的多模块项目,而我本地以前安裝过 gradle ,正好直接用。IDEA 的 open
菜单选中项目的 build.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
类找不到定义。
解决办法:到该项目下执行 gradle build -x test
命令,等待编译完成:
编译完成后,该模块下会生成这个类,本质是利用简单的 XML 配置生成一个 Java 类:
接下来就可以愉快地分析源码啦,比较神奇的是,它的调度过程既支持 Quartz ,也有一个内置的时间调度模块。
XXL-Job 为了摆脱 Quartz 也实现了自己 TimeWheel
,它们的思路是一样的:轮询调度任务的执行时间和当前系统时间,对比是否匹配。
搞清楚 Azkaban 的 BasicTimeChecker
类图结构后,自己造轮子写一个基于 Cron 表达式的时间检查工具也不是问题。