Java 定时任务四方案:@Scheduled、Quartz、XXL-Job、PowerJob——怎么选
引言 凌晨 3 点被电话叫醒,打开日志发现定时任务又双击了——上次跑的实例还没结束,这次又开始了,两份并行把库存扣了两遍。这不是什么复杂的分布式 bug,就是单机 @Scheduled 在多实例部署下没有做幂等也没有做调度协调,各跑各的。 找运维要个控制台看看任务状态,答:"没有控制台,任务定义在代码里,改 Cron 要重新发版。" 要个失败重试和告警,答:"自己写 log + 钉钉机器人。" 要个任务执行历史,答:"去 ELK 里搜。" @Scheduled 是个很好的起点,但业务长到"多实例部署 + 任务可视化 + 动态调整 + 失败告警"这四件事里的任何一个,它就不够用了。 团队开始找替代方案:Quartz?XXL-Job?PowerJob?每个方案看起来都能解决一部分问题,但谁也说不清哪个最适合自己。这篇文章把四个方案按"从简单到复杂"排开,逐个拆解能力边界,最后给一张决策树——照着选就行。 一、四个方案速览 1.1 一句话定位 方案一句话定位调度 vs 执行 @ScheduledSpring 原生注解,单机定时器应用内线程池 QuartzJava 生态老牌调度框架,....