XXL-Job 是一个分布式任务调度平台,用 Java 写的。它的名字很有特色,“XXL” 据说是作者名字的缩写,“Job” 就是任务的意思,合起来就是 “作者的任务调度平台”,简单粗暴又好记!
参考文章:
SpringBoot整合xxl-job实现定时任务_xxl-job springboot-优快云博客
需要注意的是,版本3.x
开始要求Jdk17
;版本2.x
及以下支持Jdk1.8
。如对Jdk版本有诉求,可选择接入不同版本。我这里下载了基于jdk8
的最后的版本2.5.0
。
想象一下,你是一个餐厅老板,每天要安排服务员上菜、厨师做菜、收银员结账,还要处理各种突发情况。如果没有一个好的管理系统,肯定会乱成一团。XXL-Job 就像是你的餐厅管理系统,帮你管理和调度各种任务,让它们有条不紊地执行。
1.XXL-Job 的核心功能:
-
任务调度:就像餐厅的排班表,你可以指定任务在什么时候执行,多久执行一次。比如,每天早上 9 点自动煮咖啡,每小时检查一次库存。
-
分布式执行:如果你的餐厅开了多家分店,XXL-Job 可以帮你把任务分配到不同的分店执行。比如,让 A 店负责做菜,B 店负责送餐,C 店负责收银。
-
失败重试:如果某个任务执行失败了,XXL-Job 会自动重试,就像服务员上菜摔倒了,爬起来再上一次。你还可以设置重试次数和间隔时间,比如摔倒 3 次就放弃。
-
监控报警:XXL-Job 会实时监控任务的执行情况,如果发现任务执行超时或者失败,会像你的餐厅报警器一样,立刻通知你。你可以选择短信、邮件或者微信报警,让你随时掌握任务的状态。
-
参数配置:每个任务都可以设置自己的参数,就像每个菜都有自己的配方。比如,煮咖啡需要多少咖啡豆、多少水,这些参数可以在任务执行时动态调整。
2.XXL-Job 的优点:
- 简单易用:界面友好,就像玩游戏一样简单。即使你是个技术小白,也能轻松上手。
- 功能强大:支持 cron 表达式、分片任务、子任务依赖等高级功能,满足各种复杂的任务调度需求。
- 开源免费:不用花钱买,直接下载使用,省了一笔不小的开支。
- 社区活跃:有很多开发者在使用和维护,遇到问题可以随时在社区求助。
3.XXL-Job 的使用场景:
- 定时任务:比如每天凌晨自动备份数据库,每周生成一次报表。
- 数据同步:比如每隔一小时从 Redis 同步数据到 MySQL。
- 消息通知:比如订单支付成功后,自动发送短信通知用户。
- 批量处理:比如每天晚上处理当天的日志文件。
4.能调用其他项目的定时任务
XXL - Job 的定时任务,既可以写在它自己的项目里(也就是执行器和调度中心在同一套代码里这种简单玩法),更厉害的是 能调用其他项目 ,就像个 “任务调度大管家”,能跨项目、跨服务去触发任务,下面给你唠明白:
一、“自己玩” 模式(任务写在 XXL - Job 相关项目里 )
要是你图简单,直接在 XXL - Job 的执行器项目里,用 @XxlJob
注解写任务逻辑,就像这样:
@XxlJob("demoJobHandler")
public void demoJob() {
// 这里写任务逻辑,比如查数据库、发消息
System.out.println("XXL - Job 自己项目里的任务执行啦!");
}
这时候,调度中心(xxl - job - admin)直接调度这个执行器里的任务,相当于 “自己人内部调度”,简单直接。
二、“跨项目调用” 模式(核心玩法,超实用 )
实际开发里,更多是 调度中心(xxl - job - admin)去调用其他项目里的任务 ,原理像这样:
1.其他项目当 “执行器” :
把别的 Java 项目(不管是 Spring Boot、Spring Cloud 项目啥的),通过引入 XXL - Job 的依赖,配置好调度中心地址,变成 执行器 。比如在其他项目的 pom.xml
加:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl - job - core</artifactId>
<version>最新版本</version>
</dependency>
然后在 application.yml
配调度中心地址:
xxl:
job:
admin:
addresses: http://调度中心的IP:端口/xxl - job - admin
executor:
appname: 你的执行器名称
2.给其他项目的方法 “打标签” :
在其他项目里,想让 XXL - Job 调度的方法,用 @XxlJob
注解标记,比如其他项目里有个订单处理服务,要定时关单:
@Service
public class OrderService {
@XxlJob("closeOrderJob")
public void closeOrder() {
// 这里写关单逻辑,比如查超时订单、更新状态
System.out.println("调用其他项目(订单服务)的关单任务啦!");
}
}
3.调度中心 “指挥” 跨项目任务 :
在 XXL - Job 的调度中心网页(就是那个登录后能新建任务的地方),新建任务时,填好 执行器(选你配置的其他项目的执行器) 、Cron 表达式(啥时候执行),然后指定要调用的任务名(比如上面的 closeOrderJob
)。这样,到时间调度中心就会通过 HTTP 或者 RPC (看配置,新版本默认 HTTP 更简单), 跨项目触发那个 closeOrder
方法 ,完美实现 “调用其他项目的任务”!
三、举个生活例子理解
把 XXL - Job 调度中心想成 “班主任”,任务就是 “布置作业”:
- “自己项目里的任务”:就像班主任让自己班里的学生(执行器和调度中心在一个项目)做练习册(任务逻辑),直接喊一嗓子就行。
- “调用其他项目的任务”:相当于班主任(调度中心)给隔壁班(其他项目)的同学(执行器)布置作业(触发任务),通过 “班级群(网络通信)” 通知,让隔壁班同学执行对应的作业内容(其他项目里的方法逻辑)。
总之,XXL - Job 厉害就厉害在 能灵活调度自己项目,也能跨项目、跨服务 ,让定时任务像 “外卖骑手” 一样,想去哪执行就去哪执行,帮你管好各种定时干活的事儿! 要是玩的时候遇到跨项目调用的权限、网络问题,比如其他项目需要登录验证,就像给 “外卖” 包个 “凭证”(在请求里加 token 之类的),也能解决,放心折腾~