XXL-JOB补充动态管理定时任务功能

2023年9月2日

本文出自明月工作室:https://www.freebytes.net/it/java/xxl-job%e8%a1%a5%e5%85%85%e5%8a%a8%e6%80%81%e7%ae%a1%e7%90%86%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1%e5%8a%9f%e8%83%bd.html

使用xxl-job,可以很方便的在界面上添加定时任务,并根据注册到执行器的节点,实现rpc调用;手动执行任务、查看调度日志也非常方便。

新建一个执行器,执行器用于绑定注册上来的机器地址,也就是回调者。

XXL-JOB补充动态管理定时任务功能插图

在指定执行器下,新建一个任务,当任务触发时,即进行回调。

XXL-JOB补充动态管理定时任务功能插图(1)

新建任务的接口实际上是源码中JobInfoController的add接口:

XXL-JOB补充动态管理定时任务功能插图(2)

xxl-job的整体逻辑非常简单,源码也非常亲民。它的不足之处就是没有开放出远程调用的接口,让其他服务可以方便的调用。目前它的所有接口都是需要登录认证的,不过它保留了一个很有用注解:@PermissionLimit(limit = false),把这个注解贴在它的controller接口上,就可以实现免登录认证了。

我的方案就是将xxl-job源码下载下来,利用 @PermissionLimit(limit = false) 注解,在admin模块中重新写几个管理job任务的接口(具体包括添加job、启动job、修改job、停止job、删除job),这些接口使用自定义的认证方式(认证方式可根据业务场景的安全性要求自行斟酌),其他的逻辑可完全复用原来的方法(全在源码中的JobInfoController类中)。然后将代码部署在私服中,便可支持http协议的免登陆调用了。

我们的应用层服务在指定xxl-job服务地址的时候,将其指定为私服的xxl-job地址,用户通过应用层服务的界面添加了一个定时任务,实际上构建一个xxlJobInfo对象,并远程调用到私服xxl-job的免登陆接口,实现动态管理job的功能。