目录

为什么使用XXL-JOB
XXL-JOB是一个轻量级分布式任务调度平台。特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展。是国内任务调度领域的标杆项目,许雪里老师的设计兼顾了易用性与功能完整性。依赖组件少,集成简单。在通用性、易用性、功能完整性上有巨大优势,适合大多数场景。
- 可视化管理界面:Xxl-job 提供直观、易用的可视化管理界面,让我们能够方便地管理和监控定时任务。
- 分布式任务调度:对于分布式系统,Xxl-job 提供了强大的分布式任务调度能力,可以轻松地实现任务在集群中的分发和执行。
- 任务执行日志:Xxl-job 支持任务执行日志的记录和查看,这有助于及时发现和解决任务执行中的问题。
- 支持动态增删任务:Xxl-job允许在项目运行或上线后动态添加和删除任务,无需停止整个服务。
- 代码入侵较低:定时任务相对独立,代码入侵比较严重的框架肯定是不会考虑的,而xxl-job完全采用注解方式,使用成本低,且兼容性较好。
提供全功能Web控制台,支持任务监控、日志查看、报警策略配置等操作,无需编程即可实现动态管理。(其实是集成了Quartz后发现没有现成的图形化界面,不想自己实现偷懒用XXL-JOB)
Xxl-job使用
首先去gitee拉取xxl-job的项目源码,建议选用较新且稳定的版本
这里拉取最新版本:xxl-job-2.5.0
项目地址:https://gitee.com/xuxueli0323/xxl-job

首先在doc文件夹下找到源码中带的sql脚本文件,在本地mysql下运行该脚本文件,之后就可以生成一个调度中心的数据库,该数据库主要用于对后面调度中心配置的一些数据进行存储和统计。

配置中心主要配置
数据库生成完毕后,需要去调度中心的配置文件中对调度中心进行配置,

启动admin服务,访问默认地址:
即可进入调度中心首页,默认登录账号 "admin/123456", 登录后运行界面如下图所示:

集成
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.5.0</version>
</dependency>
yml
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin
executor:
# 执行器名称
appname: xxl-job-executor
# 可选,不配置则自动获取
ip:
port: 9999
# 日志路径
logpath: /data/applogs/xxl-job/jobhandler
# 日志保留天数
logretentiondays: 30
accessToken:
logging:
level:
com.xxl.job: DEBUG
XxlJobConfig
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author admin
* @date 2026/1/11 22:07
*/
@Configuration
@Slf4j
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
SampleXxlJob
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* @author admin
* @date 2026/1/11 22:08
*/
@Component
@Slf4j
public class SampleXxlJob {
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
String param = XxlJobHelper.getJobParam();
XxlJobHelper.log("param: " + param);
TimeUnit.SECONDS.sleep(2);
XxlJobHelper.log("beat at:" + System.currentTimeMillis());
log.info("demoJobHandler執行結束");
}
@XxlJob("shardingJobHandler")
public void shardingJobHandler() throws Exception {
// 分片参数
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();
XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
// 业务逻辑
for (int i = 0; i < shardTotal; i++) {
if (i == shardIndex) {
XxlJobHelper.log("第 {} 片, 命中分片", i);
} else {
XxlJobHelper.log("第 {} 片, 忽略", i);
}
}
log.info("shardingJobHandler執行結束");
}
}
创建执行器和任务


启动项目

执行和查看日志

组件版本清单
当前Spring Cloud 微服务组件版本清单
- JDK: 1.8
- MySQL: 8.0.33
- Nacos 2.2
- Spring Boot2.7.18
- Spring Cloud2021.0.9
- Spring Cloud Alibaba 2021.0.5.0
- Hutool5.8.25
- Lombok 1.18.26
- XxlJob2.5.0
最后
在选择分布式调度引擎的时候,发现了一个有意思的分布式调度方案JobFlow,感兴趣的可以看看
JobFlow 是面向业务中台的轻量级、高性能分布式调度引擎,专为 Nacos 体系打造,在不引入任何新中间件的前提下,将任务调度、动态分片和延时队列能力内建到微服务架构之中。