xxl-job是一个开源的系统,类似sprig-quart定时器一样,可以收集需要跑批的定时任务。
源码下载GitHub地址:https://github.com/xuxueli/xxl-job
开源系统包括调度中心、核心类、测试实例三个相互依赖的模块。
调度中心:
主要收集注册过来的执行器与执行任务并做UI展示与操作,调度中心需要配置保存注册任务与操作记录的数据库
数据库初始化脚本见开源代码doc目录
核心类:
该模块是封装的一些工具类和初始化内容,无需配置,直接被依赖即可
测试实例:
测试实例关键需要配置执行器注册信息,包括调度中心地址,执行器的执行端口、实例名称。
其中执行器的执行端口跟测试实例项目的端口不一致,需要区分开。
【调度中心地址】是调度中心模块的地址
如上配置完之后需要初始化必要必要的配置到核心类模块中:
添加执行任务方法入口:
执行任务在项目启动初始化实例时注册到调度中心,所以方法所在类需要添加@Component注解,
@XxlJob注解标识执行任务方法入口,其中demoJobHandler_myself是执行任务名称,
如上模块配置完,调度执行模块和测试实例模块就可以以此运行起来,剩下的就在调度中心UI里面进行配置了。
调度中心控制系统配置:
调度中心控制系统的返回路径是调度中心模块的首页,如:默认的用户名/密码是admin/123456
登入之后的操作:
添加执行器
【APPName】需要跟测试实例中的xxl.job.executor.appname参数值匹配
【机器地址】是注册中心的xxl.job.executor.ip与xxl.job.executor.port的测试值:http://ip:host/
添加执行任务:
【执行器】需要跟添加执行器名称相互匹配,也就是任务要跟项目匹配
【Cron*】是时间表达,具体可以参考如下:
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
网页生成器:https://cron.qqe2.com/
【JobHandler*】任务名称,该名称要跟测试实例中的@XxlJob注解的名称匹配
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通过如上的配置,定时任务就可以跑起来了,那么该怎么独立出调度中心呢,就是执行器和执行内容分布到了其他的项目怎么办?
这边为了防止因版本的差异,可以直接把开源项目三个模块同时发布到maven私服,在其他项目直接dependency添加依赖就可以,
其他的配置方法跟上面的测试实例一模一样(注意区分实例名称和执行器端口)
如果不发布到私服环境可以把开源项目构建在同一个主项目的子module下,跟开源项目平行的module就都可以添加定时器依赖,如下