1 介绍一下xxl-job
XXL-JOB 是一个分布式任务调度平台,旨在为分布式应用系统提供开箱即用的调度解决方案。它非常易于使用,并具有很高的可扩展性。以下是 XXL-JOB 的详细介绍,包括其核心功能、架构设计、主要组件及其应用场景。
核心功能
-
简单易用:
- 提供友好的 Web 控制台,支持任务的增删查改操作。
- 支持手动触发、停止和重试任务。
-
调度策略丰富:
- 支持 CRON 表达式调度,精确到秒。
- 支持手动触发、周期调度、固定频率调度、补偿调度等多种调度策略。
-
任务执行方式:
- 支持 BEAN、GLUE(即在控制台编辑的脚本,比如JavaScript、Groovy)、脚本(Shell、Python 等)的任务执行方式。
-
分布式支持:
- 天然支持集群,采用无中心设计,可以轻松进行水平扩展。
- 支持广播模式和分片广播模式的任务执行方式。
-
执行日志:
- 详细记录每一次任务执行情况,包括任务开始时间、结束时间、执行结果和日志内容。
-
失败告警:
- 支持邮件、钉钉等多种方式进行任务执行失败告警。
架构设计
XXL-JOB 采用调度中心和执行器的分离设计,调度中心负责任务的管理和调度,执行器负责任务的具体执行。其主要架构组件包括:
-
调度中心(Admin)
- 提供 Web 管理界面,进行任务的管理和调度。
- 负责计算调度任务并将任务下发给执行器。
-
执行器(Executor)
- 实现执行任务的具体逻辑。
- 从调度中心接收任务并执行,执行完毕后回传执行结果。
-
任务调度:
- 基于 CRON 表达式或自定义调度方式进行任务调度。
-
执行日志:
- 记录任务的执行日志,方便查看任务的执行情况。
主要组件
-
调度中心(Admin):
- Web 控制台:提供任务的管理和监控。
- 调度管理:执行调度任务的分发。
-
执行器(Executor):
- 任务处理器:处理具体执行的任务逻辑。
- 日志记录:记录任务执行日志。
典型使用场景
-
数据处理:
- 定时从数据库、文件系统或者其他数据源提取数据,进行数据清洗和处理,再存储到数据仓库或其他存储系统。
-
营销活动:
- 定时推送营销消息或进行营销数据统计分析。
-
定时备份:
- 定时备份数据库、文件系统,以防止数据丢失。
-
定时检测:
- 定时进行服务器健康检测、系统性能监控等。
示例项目
以下是一个简单的示例项目,展示如何快速集成 XXL-JOB 到 Spring Boot 项目中。
1. 引入依赖
在您的 pom.xml
文件中添加 XXL-JOB 核心依赖:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version> <!-- 版本号根据实际情况选择 -->
</dependency>
2. 配置 XXL-JOB 执行器
在 application.properties
或 application.yml
文件中配置执行器参数:
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl.job.executor.appname=xxl-job-executor-example
xxl.job.executor.ip=
xxl.job.executor.port=9999
xxl.job.accessToken=
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30
3. 启动类添加 XXL-JOB 配置
在 Spring Boot 主入口类中添加 XXL-JOB 执行器配置:
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XxlJobConfig {
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses("http://127.0.0.1:8080/xxl-job-admin");
xxlJobSpringExecutor.setAppname("xxl-job-executor-example");
xxlJobSpringExecutor.setIp(null);
xxlJobSpringExecutor.setPort(9999);
xxlJobSpringExecutor.setAccessToken(null);
xxlJobSpringExecutor.setLogPath("/data/applogs/xxl-job/jobhandler");
xxlJobSpringExecutor.setLogRetentionDays(30);
return xxlJobSpringExecutor;
}
}
4. 编写任务处理器
在项目中编写一个任务处理器,并使用 @XxlJob
注解声明任务名称:
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.biz.model.ReturnT;
import org.springframework.stereotype.Component;
@Component
public class SampleJob {
@XxlJob("sampleJobHandler")
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
System.out.println("Executing job with param: " + param);
return ReturnT.SUCCESS;
}
}
5. 在控制台配置任务
登录 XXL-JOB 管理控制台,创建并配置调度任务。
通过这些步骤,你可以轻松在项目中集成和使用 XXL-JOB 进行任务调度。XXL-JOB 提供了强大的功能和灵活的配置,适用于各种场景下的任务调度需求。
2 弄懂xxl-job的bean调度策略和路由策略以及阻塞策略。
2.1 bean模式
2.2 xxl-job的bean调度策略和jobHandler路由策略以及阻塞策略关系
在 XXL-JOB 的任务调度中,Bean 调度策略、JobHandler 路由策略以及阻塞策略是三个不同层面的配置选项,它们共同作用来决定任务的执行方式。下面我们来详细讲解这些概念及其相互关系。
1. Bean 调度策略 (Bean 的定义和注册)
Bean 调度策略主要用于定义任务的实际执行逻辑。在 Spring 项目中,通常通过 @XxlJob
注解将某个方法注册为 XXL-JOB 的 JobHandler。
例如: