Quartz功能完整,支持集群、持久化与复杂触发规则,适合中大型系统;Spring Task轻量简单,适用于单机固定规则场景。
核心调度器选型:Quartz vs Spring Task
Java任务调度系统主流方案是 Quartz 和 Spring Task(@Scheduled)。Quartz 功能完整,支持集群、持久化、复杂触发规则(如“每月第二个周五上午9点”),适合中大型系统;Spring Task 简单轻量,基于线程池调度,适合单机、规则固定(如每5秒执行一次)的场景。若需高可用或任务失败重试、状态追踪,优先选 Quartz;若只是定时发个日志、清理缓存,@Scheduled 配合 @EnableScheduling 即可快速落地。
Quartz 关键组件与代码结构
Quartz 三大核心是 Job(任务逻辑)、Trigger(触发规则)、Scheduler(调度中枢)。Job 需实现 Job 接口,避免在 execute() 中写长耗时操作;Trigger 常用 CronTrigger(基于 cron 表达式)或 SimpleTrigger(固定间隔);Scheduler 通过 StdSchedulerFactory 创建,启动后调用 scheduleJob() 绑定任务与触发器。示例中,定义一个 Job 类,配置 CronTrigger 表达式 “0 0/1 * * * ?”(每分钟执行),再由 Scheduler 调度即可运行。
集群与持久化:避免重复执行和任务丢失
单机 Quartz 在服务重启后任务会丢失,多实例下还可能重复执行。解决方法是启用 JDBC JobStore,将任务元数据、触发器、执行状态存入数据库(如 MySQL)。需建 quartz 自带的 11 张表(官方提供 SQL 脚本),并在 quartz.properties 中配置 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 及数据源信息。开启集群模式后,各节点通过数据库锁协调,自动选举主节点,故障时任务无缝迁移。
动态任务管理:运行时增删改查
硬编码任务不灵活,生产环境常需动态控制。Quartz 提供 API 支持运行时操作:用 scheduler.addJob() 注册新任务,scheduler.rescheduleJob() 修改触发器,scheduler.p 
异常处理与监控:让调度更可靠
任务执行异常默认被 Quartz 吞掉,仅记录日志。应在 Job 的 execute() 中捕获所有异常,记录详细错误上下文,并根据业务决定是否重试(如网络请求失败可设 3 次重试)或告警(发邮件/钉钉)。同时接入监控:通过 Scheduler 的 getCurrentlyExecutingJobs() 获取运行中任务数,结合 Prometheus + Grafana 展示任务延迟、失败率、积压量;关键任务执行完成可发 MQ 消息,供审计系统消费。








