XXL-JOB 已经能跑起来了:

把它搬上手,基本上就是把源码拉下来、把建表脚本在目标库跑一遍、改好配置、把 admin 和 executor 启动起来这几步合起来的事。默认控制台地址是
http://localhost:8080/xxl-job-admin,账号 admin/123456,登录进去能看到机器列表、任务目录和执行日志,任务下发后会在注册的执行器上触发,执行日志也会回传到调度中心,没跑起来的大多是漏了建表或没把执行器注册上去这两样。
按操作顺序说清楚点:先把代码克隆到本地或目标服务器,把源码里自带的 SQL 脚本按目标库跑一下,确保 xxl-job 需要的表都存在。接着到 admin 的配置文件里填数据库连接、端口、密钥之类的东西,改好再启动 admin。打开浏览器敲上面那个地址,用 admin/123456 登录,就能看到调度台界面。最后在你业务进程里按文档加上执行器依赖、配置调度中心地址和执行器名称(标识),启动后在控制台应该能看到它的注册信息,之后就能在控制台建任务、下发,执行器会接收到指令并把日志聚焦上传,必要时还能配置失败告警邮件。

把调度中心和执行器分离是 XXL-JOB 的基本套路。调度中心负责下任务、管配置、收日志、做统计,执行器只管干活。这种拆分的好处是运维和运行时能分开来办:哪台机器宕了,不会把整套定时任务都带倒;想扩容时只要加执行器就行,定位问题也更简单。它们之间靠注册和心跳保持联动,控制台能直观地显示每个执行器的在线状态和心跳时间,掉线的节点一目了然。
比起在 SpringBoot 里把定时任务写成 @Scheduled,有几个直观区别。单体应用里 @Scheduled 够用,但分布式场景里问题马上出来:容易出现重复执行、想改 cron 要重启应用、日志分散在各个节点难查问题。XXL-JOB 把这些痛点填了:集群统一调度、可视化控制台、配置实时生效、失败有容错机制、支持任务分片和聚焦日志。说白了,就是把“定时任务写死在代码里”的那摊事儿,变成可被运维看得见、改得动、回滚得了的服务。

路由和分片是两个比较有用的功能。它支持按机器权重、平均分配、参数路由等多种策略,能根据你的业务负载和节点能力来分配任务。如果手上有一条要处理大数据的批任务,可以把它切成若干片,每片分给不同的执行器并行跑,既能提速也能避免重复处理;如果是需要在每个节点都做同样事情的任务,可以用广播模式,把任务同时下到所有 executor。路由和分片的组合灵活,业务方按数据分布和机器能力选策略就能把效率提上来。
高可用做法里,调度中心靠数据库锁来保证不会有多个实例同时把一样任务下发,所以你可以部署多台 admin 做热备。执行器端也有故障接管逻辑:某台机子挂了,其他注册的执行器会去接手它的分片或重试失败任务,尽量避免丢任务。还有一条比较实际的:执行日志会聚焦到调度中心,查某次任务的执行细节时不需要跳来跳去服务器,节省排障时间。告警默认支持邮件,也可以接入像钉钉、企业微信之类做二次告警。
配置环节别偷懒。数据库的建表脚本按源码里的跑一遍,表名和字段是有约定的,随意改可能出错。admin 的配置文件里最关键的是数据库信息、控制台端口和登录信息,再是一些安全相关配置。执行器一端要把调度中心地址、执行器名称、调用超时时间等设好,并在代码里把任务用注解或接口写清楚。注册成功后在控制台能看到执行器状态和可下发的任务。整个流程看多步骤,但一步一步按文档来,关键别漏了建表和注册这两步。
从开发者角度讲,把任务当成独立的 Job 来写,能单独触发调试,代码和调度分离,配置放到控制台后改 cron 或并发策略无需改代码。内置的分片和路由让处理大规模数据更容易实现。运维角度会喜爱聚焦管理、实时调度、故障自降级和统一日志报表,平时排障、统计历史任务稳定性都会方便许多。
遇问题时的排查思路别复杂化。看不到执行器,先检查执行器的注册地址和心跳是不是能到调度中心——网络、端口、配置填错都是常见缘由。发现重复执行,多半和数据库锁没生效或 HA 配置不对有关,看看是不是多台 admin 都在同时干活。日志不全常是网络或权限导致调度中心写不进去,或者执行器上传受限。按顺序回溯注册、网络、权限这些点,一般能把问题定位出来。
适用场景也比较明确。正在把单体拆成微服务、想把散落在各服务里的定时任务聚焦管理的团队,会很吃这套;有大量周期性批处理、需要并行处理大数据集的业务,分片能力能大幅提升效率;还有就是运维希望通过控制台动态调整任务而不是每次改 cron 都发新版本的场景。上手阶段把常见任务迁移过去,用几次就熟了,后续更多规则化的定时工作可以慢慢搬上来。
控制台里有统计面板,可以看任务成功率、平均耗时、执行次数等指标,执行器侧还能看到机器负载和分片分配情况。遇到压力时可以加机器或者调整路由策略来缓解。总的操作路径是:建表、配置 admin、启动 admin、把 executor 注册到调度中心,然后在控制台创建并下发任务,执行和日志回传就这么一路走完。