简介
# 📚简介
Hutool-cron是Hutool工具库中专为定时任务设计的轻量级模块,提供了一套简洁、灵活、零依赖的定时任务调度能力。它不依赖于 Quartz、Spring 等外部框架,适合在小型项目、工具类应用、嵌入式服务或对资源敏感的环境中替代传统定时任务方案。Hutool-cron是“小而美”的典范——它不做大而全的调度平台,而是专注于解决单机环境下轻量、灵活、易用的定时需求。Hutool-cron的核心目标是:“开箱即用,极简配置,灵活扩展”。
# 一、功能
| 功能 | 说明 |
|---|---|
| ✅ Cron 表达式支持 | 兼容标准 Unix Cron 语法(5位:分 时 日 月 周),支持 * / - , ? L 等符号 |
| ✅ 动态任务管理 | 运行时支持任务的添加、暂停、恢复、移除、修改调度规则 |
| ✅ 线程池隔离 | 每个 CronScheduler 可绑定独立线程池,避免任务阻塞影响系统稳定性 |
| ✅ 任务异常处理 | 提供全局异常处理器,防止单个任务崩溃导致调度器停止 |
| ✅ 任务状态监控 | 支持获取当前运行中任务数、任务列表、下次执行时间等元信息 |
| ✅ 自定义任务类型 | 除 Runnable 外,支持 Callable、Lambda 表达式、方法引用等 |
# 二、特点
- 简单易用:提供了简洁的 API,使得任务调度变得更加直观和容易上手。
- 灵活的表达式:可以使用Quzrtz类似的支持秒级别的表达式,也可以使用Crontab支持分级别的表达式调度。
- 线程安全:在设计上考虑了多线程环境下的安全性,确保任务调度的可靠性。
# 三、核心组件和架构
Hutool-cron 的设计高度模块化,主要包含以下组件:
# 1. CronUtil
- 静态工具类,提供全局便捷入口(如
CronUtil.start()、CronUtil.setMatchSecond(true)) - 内部维护一个默认的全局调度器实例(
Scheduler) - 适合快速上手,但不推荐在复杂场景中使用(缺乏隔离性)
// 打开秒匹配
CronUtil.setMatchSecond(true);
// 添加任务
CronUtil.schedule("*/2 * * * * *",
() -> Console.log("Hutool task running!"));
// 启动
CronUtil.start();
# 2. Scheduler
- 核心调度器类,真正执行任务调度的引擎
- 可创建多个实例,实现多租户/多业务隔离调度
- 支持自定义线程池(
ExecutorService)
# 3. Task
- 所有定时任务的抽象父类
- 子类:
RunnableTask:包装Runnable任务,提供更多配置选项CronTask:基于 Cron 表达式的任务InvokeTask:反射任务,通过传入类名#方法名,通过反射执行相应的方法
# 4. TaskTable
- 任务注册表,管理当前调度器中所有任务
- 提供
add(),remove(),getPattern(),getTask等操作 API
# 5. CronPattern
- Cron 表达式解析器,支持验证与计算下次执行时间
- 可独立使用,根据表达式计算下一次执行时间等
# 四、与主流调度任务库对比
| 特性 | Hutool-cron | Quartz | Spring @Scheduled | JDK ScheduledExecutorService | XXL-JOB |
|---|---|---|---|---|---|
| 定位 | 轻量级单机调度器 | 企业级分布式任务调度框架 | Spring 应用内置定时任务支持 | JDK 内置简单周期/延时执行工具 | 分布式任务调度平台 |
| 依赖 | 仅需 Hutool-cron | 较重(需 quartz.jar + 可能需数据库) | 依赖 Spring Context | JDK 内置 | 需部署中心(xxl-job-admin) + 执行器(嵌入业务服务) |
| Cron 表达式 | ✅(5位/6位/7位可选) | ✅(7位,含年) | ✅(6位) | ❌(仅支持 fixedRate/delay) | ✅(6位/7位可选,支持秒) |
| 动态管理 | ✅(运行时增删改查) | ✅(但 API 较复杂) | ❌(编译期配置) | ⚠️(有限支持) | Web 控制台可视化管理 |
| 集群支持 | ❌ | ✅(需数据库持久化) | ❌(单机) | ❌ | ✅原生支持:故障转移、分片广播、任务路由 |
| 任务持久化 | ❌ | ✅JDBC | ❌ | ❌ | ✅MySQL |
| 轻量级 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐(依赖 Spring) | ⭐⭐⭐⭐⭐ | ⭐ |
| 学习成本 | 极低(10分钟上手) | 高(Job/Trigger/Store 等概念) | 中(需 Spring 知识) | 中 | 高(需理解架构 + 部署运维) |
| 适用场景 | 工具类、小中型单机应用 | 企业级分布式系统 | Spring Boot 单体服务 | 简单延时/周期任务 | 中大型分布式系统(需管控/可观测) |
# 五、优势总结
- 轻量无侵入:不强制依赖 Spring/J2EE 容器,可嵌入任意 Java 应用。
- API 极简:90% 场景 3 行代码搞定。
- 动态性优异:非常适合需要运行时调整任务的场景(如后台管理配置定时任务)。
上次更新: 2026/01/03, 21:59:18