一、简介
XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。它支持分布式任务调度,任务的可视化管理,丰富的调度策略,并且提供了强大的容错机制,适用于各种定时任务、批量任务等场景。
二、环境要求
- JDK:建议使用 JDK 1.8 及以上版本。
- MySQL:5.6 及以上版本,用于存储任务调度相关数据。
- Web 容器:如 Tomcat 7 及以上版本,用于部署 xxl-job-admin 管理端。
三、安装部署
(一)下载源码
从官方 GitHub 仓库(xxl-job仓库地址)下载最新版本的源码。
(二)数据库初始化
- 执行 xxl-job/doc/db/tables_xxl_job.sql 脚本,在 MySQL 数据库中创建所需的表结构和初始化数据。
(三)部署 xxl-job-admin
- 进入 xxl-job/xxl-job-admin 目录,修改 application.properties 配置文件,配置数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
username: root
password: 123456
- 配置调度中心通讯地址,默认端口为 8080:
xxl:
job:
admin:
addresses: http://localhost:8080/xxl-job-admin
- 打包项目:
mvn clean package -Dmaven.test.skip=true
- 将生成的 xxl-job-admin-{version}.jar 文件部署到 Tomcat 等 Web 容器中,并启动容器。
(四)部署 xxl-job-executor
- 新建一个 Maven 项目,引入 xxl-job-core 依赖:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>{latest-version}</version>
</dependency>
- 编写配置类,配置执行器相关信息,例如:
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XxlJobExecutorConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@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.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
- 编写任务执行类,实现具体的任务逻辑,例如:
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class SampleXxlJob {
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
// 任务逻辑
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("这是第 " + i + " 次执行任务");
// 模拟业务操作
Thread.sleep(1000);
}
XxlJobHelper.handleSuccess("任务执行成功");
}
}
- 启动项目,执行器会自动注册到 xxl-job-admin 中。
四、核心概念
(一)任务调度中心(xxl-job-admin)
负责管理调度任务,包括任务的增删改查、调度策略配置、任务执行状态监控等。它是整个任务调度系统的核心管理模块。
(二)任务执行器(xxl-job-executor)
实际执行任务的模块,接收调度中心的调度请求,执行具体的任务逻辑,并将执行结果反馈给调度中心。
(三)任务(Job)
一个具体的业务任务,由任务调度中心进行管理和调度,任务执行器负责执行。每个任务都有唯一的标识(JobId),并可以配置不同的调度策略。
(四)调度策略
- CRON 表达式:通过 CRON 表达式定义任务的执行时间,例如 0 0 0 * *? 表示每天 0 点执行。
- 固定速率:按照固定的时间间隔执行任务,例如每隔 5 分钟执行一次。
- 固定延迟:在任务执行完成后,延迟指定的时间后再次执行。
五、任务管理
(一)任务创建
在 xxl-job-admin 管理界面中,点击 “新增任务” 按钮,填写任务的基本信息,包括任务名称、执行器、任务 handler 名称等,并配置调度策略。
(二)任务编辑
可以修改任务的基本信息和调度策略,修改后保存即可生效。
(三)任务删除
在任务列表中选择要删除的任务,点击 “删除” 按钮即可删除任务。
六、任务执行与监控
(一)任务执行
当任务到达调度时间时,调度中心会将任务调度请求发送给对应的任务执行器,执行器执行任务逻辑,并将执行结果返回给调度中心。
(二)任务监控
在 xxl-job-admin 管理界面中,可以查看任务的执行状态,包括执行时间、执行结果、执行日志等。如果任务执行失败,可以查看失败原因并进行相应的处理。
七、容错机制
(一)失败重试
当任务执行失败时,xxl-job 支持配置失败重试次数和重试间隔,自动进行任务重试。
(二)阻塞处理策略
当任务执行时间较长,且下一次调度时间已到,可配置阻塞处理策略,例如 “单机串行”、“丢弃后续调度” 等,以避免任务执行冲突。
八、日志管理
xxl-job 会记录任务的执行日志,日志存储在执行器指定的目录下。在 xxl-job-admin 管理界面中,可以查看任务的执行日志,方便排查问题。
以上就是 xxl-job 的基本技术文档内容,希望对你有所帮助。在实际使用中,你可以根据具体需求进一步深入了解和应用 xxl-job 的功能。