- 文档
- 教程
- 后端
【免费下载链接】CodeGuide
:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、点赞、分享)!
导读
本篇技术指南完整讲解在 Lottery 抽奖系统(Docker 环境)中部署 XXL-JOB 分布式任务调度中心的全部步骤:从准备 MySQL 数据库、导入 xxl-job 初始化 SQL 脚本,到拉取官方镜像、以单行docker run命令完成调度中心启动,并逐一拆解PARAMS环境变量中数据源、端口、访问令牌等关键参数的配置含义。读完本文,你不仅能独立部署一套可用的 XXL-JOB 调度中心,还能理解它与 Lottery 项目中活动状态扫描、MQ 消息补偿等定时任务场景的配合方式。
一、为什么 Lottery 项目需要 XXL-JOB
Lottery 抽奖系统在业务推进过程中会遇到典型的定时任务场景,例如:
- 活动状态扫描:把审核通过的活动扫描为“活动中”,把已过期活动的状态扫描为“关闭”,参见 第17节:引入xxl-job处理活动状态扫描;
- MQ 消息补偿:扫描抽奖发货单消息状态,对未发送或发送失败的 MQ 进行补偿发送,保障全流程可靠性,参见 第18节:扫描库表补偿发货单MQ消息。
这类需求如果散落在各个应用里各自写Timer、@Scheduled,会面临任务不可视、无重试、无告警、无法集群 HA 等问题。XXL-JOB 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展,其调度中心与执行器分离的架构能够为 Lottery 这类包含多服务、需要集群部署的系统提供统一的任务注册、调度、监控入口。其核心能力包括:
- 简单:通过 Web 页面对任务进行 CRUD 操作,一分钟上手;
- 动态:支持动态修改任务状态、启动/停止任务、终止运行中任务,即时生效;
- 调度中心 HA:中心式设计,支持集群部署;
- 执行器 HA:任务分布式执行,执行器支持集群部署;
- 注册中心:执行器周期性自动注册,调度中心自动发现并触发执行;
- 触发策略:Cron 触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发;
- 阻塞处理策略:单机串行(默认)、丢弃后续调度、覆盖之前调度;
- 任务超时控制 / 失败重试 / 失败告警:超时主动中断、按预设次数重试、默认邮件告警并预留扩展接口;
- 路由策略:第一个、最后一个、轮询、随机、一致性 HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
- 分片广播 / 动态分片:以执行器为维度分片,可随集群扩容动态增加分片数量,提升大数据量任务的处理能力。
正因如此,Lottery 项目在Part-2阶段就引入 XXL-JOB 解决分布式定时任务问题,并在云服务器部署阶段(Part-5)把它作为独立中间件环境安装到 Docker 中。
二、部署前置:先准备好 MySQL 环境
XXL-JOB 调度中心的元数据(执行器注册信息、任务配置、调度日志等)全部持久化在 MySQL 中,因此部署 xxl-job-admin 之前,必须有一个可用的 MySQL 实例。
在 Lottery 的部署链路里,MySQL 环境的安装已经在上一章节完成,详见 第04节:部署环境 Mysql,其核心动作是:
- 通过 Docker Hub 或
docker search mysql查看可用版本; - 拉取镜像:
docker pull mysql:latest; - 启动容器并使用本地 SQL 工具连接 MySQL,创建库表并导入建表语句。
前置提醒:如果你的云服务器还没有 Docker 环境,需要先按 第01节:在云服务器部署 Docker 完成安装。文中示例环境为 CentOS 8.x + Docker 20.10.11,若拉取镜像时报错
error response from daemon: Get "https://registry-1.docker.io/v2/...",可在 Docker 配置中补充registry-mirrors镜像加速地址后重启 Docker 解决。
部署 XXL-JOB 前的运维日志归纳如下:
- 在 Docker 容器中部署 xxl-job;
- 部署前需要 MySQL 环境(上一章节已安装完成);
- 本章节下载 xxl-job 2.1.2 对应的 SQL 文件并导入,作为调度中心的初始化数据。
三、导入 xxl-job 初始化 SQL
xxl-job 官方在发布包中提供了初始化脚本,Lottery 项目将 xxl-job 2.1.2 对应的 SQL 文件存放在仓库的doc/assets/sql/xxl-job.sql路径下,可直接打开使用。
1. 创建数据库
使用本地 SQL 链接工具(示例中为 Navicat Premium)连接上一章节部署好的 MySQL,创建一个名为xxl_job的数据库,然后将xxl-job.sql文件整体导入。
2. 导入后生成的调度核心表
脚本导入成功后,xxl_job库下会生成一批 xxl-job 调度中心运行所依赖的表,包括:
| 表名 | 职责说明 |
|---|---|
xxl_job_group | 执行器信息表,保存执行器 AppName、名称、注册方式与地址列表 |
xxl_job_info | 任务信息表,保存任务配置、调度 Cron、路由策略、阻塞策略、任务参数等 |
xxl_job_lock | 任务调度锁表,用于调度中心集群环境下保证调度的一致性 |
xxl_job_log | 调度日志表,记录每次调度触发与执行结果 |
xxl_job_log_report | 调度日志报表,用于调度中心统计展示 |
xxl_job_logglue | 任务 GLUE 模式(在线编辑代码)的代码历史表 |
xxl_job_registry | 执行器注册表,执行器心跳上报后在此登记,调度中心据此发现执行器 |
xxl_job_user | 调度中心后台登录用户表(默认账号 admin / 123456) |
这些表是调度中心正常工作的数据底座:执行器通过xxl_job_registry完成自动注册,任务调度通过xxl_job_info读取任务配置,运行记录写入xxl_job_log供 Web 台监控。
四、拉取 xxl-job-admin 镜像
xxl-job 官方提供了开箱即用的 Docker 镜像xuxueli/xxl-job-admin,Lottery 部署章节选用的是2.3.0版本,拉取命令如下:
docker pull xuxueli/xxl-job-admin:2.3.0镜像拉取完成后,可以用docker images确认镜像是否就绪。接下来就是最关键的部署环节——通过一条docker run命令完成调度中心的启动与配置注入。
五、部署 xxl-job 调度中心(Docker 启动命令拆解)
xxl-job-admin 基于 Spring Boot 开发,官方镜像约定通过环境变量PARAMS传入 Spring Boot 的启动参数,从而在不改动镜像内部配置文件的前提下完成端口、数据源、访问令牌的定制。Lottery 项目使用的完整部署命令如下:
docker run -e PARAMS=" --server.port=7397 --spring.datasource.url=jdbc:mysql://172.17.0.6:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 --spring.datasource.username=root --spring.datasource.password=123456 --xxl.job.accessToken=xdsl3ewi3al1oehxmo68pqxer" -p 7397:7397 -v /logs/xxl-job:/data/applogs --name xxl-job-admin --restart=always -d xuxueli/xxl-job-admin:2.3.0关键提醒:命令中的数据库服务器 IP(
172.17.0.6)、账号、密码、accessToken 都需要修改成你自己的实际值。
下面对这条命令逐段拆解说明。
1. 基础运行参数
| 参数 | 含义 |
|---|---|
-d | 后台运行容器,并返回容器 ID |
--name xxl-job-admin | 指定容器名称,便于后续docker logs、docker stop等运维操作 |
--restart=always | 容器退出时自动重启,保证调度中心在服务器重启或进程异常退出后能自愈 |
-p 7397:7397 | 端口映射,格式为「宿主机端口:容器端口」,将容器的 7397 端口暴露到宿主机 |
-v /logs/xxl-job:/data/applogs | 数据卷挂载,将容器内的任务执行日志目录/data/applogs映射到宿主机/logs/xxl-job,方便日志持久化与排查 |
-e PARAMS="..." | 注入 Spring Boot 启动参数,这是 xxl-job-admin 镜像的配置入口 |
2.PARAMS中的调度中心参数
PARAMS的本质是追加到java -jar之后的 Spring Boot 命令行参数,优先级高于application.properties,因此无需修改镜像内配置即可完成个性化:
| 参数 | 示例值 | 说明 |
|---|---|---|
--server.port | 7397 | 调度中心 HTTP 服务端口,与-p 7397:7397的容器端保持一致,浏览器通过该端口访问后台 |
--spring.datasource.url | jdbc:mysql://172.17.0.6:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 | JDBC 数据源地址,指向已导入 SQL 的xxl_job库 |
--spring.datasource.username | root | 数据库账号 |
--spring.datasource.password | 123456 | 数据库密码,部署时务必替换为强密码 |
--xxl.job.accessToken | xdsl3ewi3al1oehxmo68pqxer | 调度中心与执行器之间的访问令牌,执行器接入时必须配置相同的令牌才能完成注册与调度 |
3. JDBC URL 中三个关键参数的用意
数据源 URL 中携带的useUnicode、characterEncoding、serverTimezone三个参数值得单独说明:
useUnicode=true:启用 Unicode 字符集支持,配合characterEncoding一起使用,避免中文乱码;characterEncoding=UTF-8:指定客户端连接使用 UTF-8 编码,任务名称、日志等中文内容才能正确读写;serverTimezone=GMT%2B8:指定服务器时区为东八区(GMT+8的 URL 编码形式,%2B即+)。MySQL 8.x 驱动对时区敏感,不显式指定会因服务器与客户端时区差异导致时间解析异常,进而影响任务调度时间的计算。
六、部署后的验证与运维检查
容器启动后,建议按以下顺序做一轮验证:
- 查看容器状态:
docker ps | grep xxl-job-admin,确认容器状态为Up,且--restart=always策略已生效; - 查看启动日志:
docker logs -f xxl-job-admin,关注 Spring Boot 启动 Banner、数据源初始化及 Tomcat 端口监听日志,出现Started XxlJobAdminApplication字样即代表启动成功; - 访问调度中心后台:浏览器打开
http://云服务器IP:7397/xxl-job-admin,使用默认账号admin/ 密码123456登录(首次登录后建议立即修改默认密码,参见xxl_job_user表)。
若部署在其他云服务器,请确认安全组/防火墙已放行
7397端口,否则外部无法访问后台界面。
七、接入 Lottery 应用:执行器注册与任务配置
调度中心部署完成只是第一步,要让 Lottery 应用里的定时任务真正跑起来,还需要完成“执行器”的接入与“任务”的配置,这一链路在 第17节:引入xxl-job处理活动状态扫描 中有完整讲述。其整体协作流程是:
- 执行器侧配置:在 Lottery 应用(Spring Boot 工程)中引入
xxl-job依赖,配置执行器 AppName、调度中心地址、端口以及与调度中心一致的 accessToken; - 执行器自动注册:应用启动后,执行器周期性向调度中心上报心跳,调度中心通过
xxl_job_registry表发现并登记执行器地址; - 后台配置任务:登录调度中心 Web 台,在执行器列表中选择对应 AppName,新增任务并配置 Cron 表达式、路由策略、阻塞处理策略等,任务定义写入
xxl_job_info; - 调度触发执行:调度中心按 Cron 触发任务,将调度请求下发到执行器,执行器回调执行结果并写入
xxl_job_log,Web 台即可实时查看调度日志与执行进度。
在 Lottery 项目中,任务处理类位于应用层worker包下的LotteryXxlJob中,例如 第18节:扫描库表补偿发货单MQ消息 中的“扫描抽奖发货单消息状态、补偿发送 MQ”任务,就是在LotteryXxlJob中添加任务方法后,再配置到 xxl-job 调度后台完成定时触发。活动状态扫描、MQ 补偿这类任务都依赖分库分表路由能力扫描多张表,调度中心的统一触发与监控正好让这批任务的运行状态一目了然。
八、小结
至此,Lottery 抽奖系统的 XXL-JOB 分布式任务调度中心已在 Docker 环境中部署完毕。整个部署链路可归纳为三步:
- 准备 MySQL:沿用上一章节部署的 MySQL 实例,创建
xxl_job库并导入官方初始化 SQL(生成xxl_job_info、xxl_job_group、xxl_job_registry等核心表); - 拉取镜像:
docker pull xuxueli/xxl-job-admin:2.3.0; - 一键部署:通过
-e PARAMS注入端口、数据源、账号密码与 accessToken,配合端口映射、日志卷挂载与--restart=always完成高可用启动。
调度中心就绪后,即可在 Web 后台完成执行器管理与任务配置,让 Lottery 中的活动状态扫描、MQ 消息补偿等分布式定时任务纳入统一调度与监控体系。
- 文档
- 教程
- 后端
【免费下载链接】CodeGuide
:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、点赞、分享)!
相关推荐
Lottery 抽奖系统部署实战:Docker 安装 Nacos 注册中心并接入 Dubbo 服务注册
Lottery 抽奖系统部署实战:Docker 安装 Nacos 注册中心并接入 Dubbo 服务注册 导读 本篇是《Lottery 分布式抽奖系统》部署环境系
文档教程后端JEECG-Boot分布式任务调度:XXL-Job集群部署与任务管理终极指南
JEECG Boot分布式任务调度:XXL Job集群部署与任务管理终极指南 JEECG Boot作为一款强大的企业级快速开发平台,深度集成了XXL Job分布
低代码后端前端AI 应用大模型RAG工作流自动化【限时免费】 【xxl-job】开源下载和安装教程
【xxl job】开源下载和安装教程 1、项目介绍 XXL JOB是一个轻量级分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。主要特性包括
任务调度后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考