XXL-Job的概念
XXL-Job 是一个分布式任务调度平台,由大众点评员工徐雪里(XXL)开源。它具有轻量级、易集成、易扩展等特点,基于 Java 语言开发,提供了 Web 界面进行任务的管理和调度,支持多种任务调度方式,可帮助开发者快速实现任务的分布式调度。
XXL-Job 的用处
- 分布式任务调度:在分布式系统中,经常需要在不同的节点上执行定时任务。XXL-Job 可以将任务分发到多个节点上执行,提高系统的处理能力和可靠性。
- 任务管理可视化:提供了直观的 Web 管理界面,方便开发者对任务进行管理,如任务的新增、修改、删除、暂停、启动等操作,还能查看任务的执行日志和执行状态。
- 丰富的调度策略:支持 CRON 表达式、固定间隔、固定延迟等多种调度方式,可以满足不同场景下的任务调度需求。
- 任务失败重试:当任务执行失败时,XXL-Job 支持设置重试次数和重试间隔,提高任务执行的成功率。
- 故障转移:如果某个执行器节点出现故障,XXL-Job 可以自动将任务转移到其他可用的节点上执行,保证任务的正常运行。
XXL-Job 的使用步骤
1. 环境准备
- JDK 1.8+
- MySQL 5.7+
- Maven
2. 部署调度中心
- 下载源码:从 XXL-Job 的 GitHub 仓库(https://github.com/xuxueli/xxl-job )下载源码。
- 创建数据库:执行
xxl-job/doc/db/tables_xxl_job.sql脚本,在 MySQL 中创建 XXL-Job 所需的数据库和表。 - 配置调度中心:修改
xxl-job-admin/src/main/resources/application.properties文件,配置数据库连接信息:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root- 启动调度中心:运行
xxl-job-admin模块的XxlJobAdminApplication类,启动调度中心。访问http://localhost:8080/xxl-job-admin,使用默认账号admin和密码123456登录。
3. 创建执行器项目
- 创建 Maven 项目:在项目的
pom.xml中添加 XXL-Job 依赖:
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.1</version> </dependency>- 配置执行器:在
application.properties中配置执行器信息:
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### 执行器通讯TOKEN [选填]:非空时启用; xxl.job.accessToken= ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 xxl.job.executor.appname=xxl-job-executor-sample ### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。 xxl.job.executor.address= ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"; xxl.job.executor.ip= ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口; xxl.job.executor.port=9999 ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径; xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ### 执行器日志保存天数 [选填] :值大于3时生效,启用执行器日志定期清理功能,否则不生效; xxl.job.executor.logretentiondays=30- 创建任务处理器:创建一个类,实现
IJobHandler接口,并使用@JobHandler注解标记:
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 { XxlJobHelper.log("XXL-Job 任务开始执行"); // 任务逻辑代码 XxlJobHelper.log("XXL-Job 任务执行结束"); } }- 启动执行器:运行执行器项目的启动类,执行器会自动向调度中心注册。
4. 在调度中心配置任务
- 登录调度中心:访问
http://localhost:8080/xxl-job-admin,登录调度中心。 - 新增执行器:在“执行器管理”页面,点击“新增”按钮,添加执行器信息,AppName 要与执行器项目配置的
xxl.job.executor.appname一致。 - 新增任务:在“任务管理”页面,点击“新增”按钮,配置任务信息,包括任务描述、调度类型、执行器、任务处理器等。
- 启动任务:配置完成后,点击任务列表中的“启动”按钮,任务将按照设定的调度策略开始执行。
通过以上步骤,你就可以使用 XXL-Job 实现分布式任务调度了