魔改xxl-job,彻底告别手动配置任务!

原创:微信公众号 码农参上,欢迎分享,转载请保留出处 。
哈喽大家好啊,我是Hydra 。
xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、支持分布式等优点,让它广泛应用在我们的项目中,解决了不少定时任务的调度问题 。
我们都知道,在使用过程中需要先到xxl-job的任务调度中心页面上,配置执行器executor和具体的任务job,这一过程如果项目中的定时任务数量不多还好说,如果任务多了的话还是挺费工夫的 。
魔改xxl-job,彻底告别手动配置任务!

文章插图
假设项目中有上百个这样的定时任务,那么每个任务都需要走一遍绑定jobHander后端接口,填写cron表达式这个流程…
我就想问问,填多了谁能不迷糊?
于是出于功能优化(偷懒)这一动机,前几天我萌生了一个想法,有没有什么方法能够告别xxl-job的管理页面,能够让我不再需要到页面上去手动注册执行器和任务,实现让它们自动注册到调度中心呢 。
分析分析一下,其实我们要做的很简单,只要在项目启动时主动注册executor和各个jobHandler到调度中心就可以了,流程如下:
魔改xxl-job,彻底告别手动配置任务!

文章插图
有的小伙伴们可能要问了,我在页面上创建执行器的时候,不是有一个选项叫做自动注册吗,为什么我们这里还要自己添加新执行器?
其实这里有个误区,这里的自动注册指的是会根据项目中配置的xxl.job.executor.appname,将配置的机器地址自动注册到这个执行器的地址列表中 。但是如果你之前没有手动创建过执行器,那么是不会给你自动添加一个新执行器到调度中心的 。
既然有了想法咱们就直接开干,先到github上拉一份xxl-job的源码下来:
https://github.com/xuxueli/xxl-job/https://github.com/xuxueli/xxl-job/
整个项目导入idea后,先看一下结构:
魔改xxl-job,彻底告别手动配置任务!

文章插图
结合着文档和代码,先梳理一下各个模块都是干什么的:
  • xxl-job-admin:任务调度中心,启动后就可以访问管理页面,进行执行器和任务的注册、以及任务调用等功能了
  • xxl-job-core:公共依赖,项目中使用到xxl-job时要引入的依赖包
  • xxl-job-executor-samples:执行示例,分别包含了springboot版本和不使用框架的版本
为了弄清楚注册和查询executorjobHandler调用的是哪些接口,我们先从页面上去抓一个请求看看:
魔改xxl-job,彻底告别手动配置任务!

文章插图
好了,这样就能定位到xxl-job-admin模块中/jobgroup/save这个接口,接下来可以很容易地找到源码位置:
魔改xxl-job,彻底告别手动配置任务!

文章插图
按照这个思路,可以找到下面这几个关键接口:
  • /jobgroup/pageList:执行器列表的条件查询
  • /jobgroup/save:添加执行器
  • /jobinfo/pageList:任务列表的条件查询
  • /jobinfo/add:添加任务
但是如果直接调用这些接口,那么就会发现它会跳转到xxl-job-admin的的登录页面:
魔改xxl-job,彻底告别手动配置任务!

文章插图
其实想想也明白,出于安全性考虑,调度中心的接口也不可能允许裸调的 。那么再回头看一下刚才页面上的请求就会发现,它在

经验总结扩展阅读