任务调度插件
企业级任务调度解决方案,基于 LCGYL Framework Core 的调度能力构建。
版本要求
该插件需要 LCGYL Framework Core v2.2.0 或更高版本。
功能特性
- ✅ 声明式调度 -
@ScheduledJob注解定义任务 - ✅ 多种调度方式 - Cron / 固定频率 / 固定延迟
- ✅ 任务管理 - 注册 / 暂停 / 恢复 / 触发
- ✅ 执行历史 - 自动记录任务执行结果
- ✅ 失败重试 - 可配置重试次数和间隔
- ✅ 分布式支持 - 集成 lock-plugin 实现分布式调度
- ✅ Actuator 端点 - 任务监控和管理
- ✅ 虚拟线程 - 默认使用 JDK 21 虚拟线程
快速开始
添加依赖
gradle
implementation 'com.lcgyl:lcgyl-scheduling-plugin:2.2.0'配置
yaml
lcgyl:
scheduling:
enabled: true
use-virtual-threads: true
distributed:
enabled: false
lock-plugin: lcgyl-lock-plugin定义任务
java
@Component
public class MyTasks {
// Cron 表达式
@ScheduledJob(name = "dailyReport", cron = "0 0 8 * * ?")
public void generateDailyReport() {
// 每天早上8点执行
}
// 固定频率
@ScheduledJob(name = "healthCheck", fixedRate = 60000)
public void healthCheck() {
// 每60秒执行一次
}
// 固定延迟
@ScheduledJob(name = "cleanup", fixedDelay = 300000, initialDelay = 10000)
public void cleanup() {
// 上次执行完成后延迟5分钟再执行
}
}任务管理
任务注册表
java
@Autowired
private JobRegistry jobRegistry;
// 获取所有任务
Collection<ScheduledJobDefinition> jobs = jobRegistry.getAllJobs();
// 暂停任务
jobRegistry.pause("dailyReport");
// 恢复任务
jobRegistry.resume("dailyReport");
// 立即触发
jobRegistry.trigger("dailyReport");执行历史
java
@Autowired
private JobExecutionRepository executionRepo;
// 查询最近执行记录
List<JobExecution> history = executionRepo.findByJobName("dailyReport", 10);分布式调度
集成 lcgyl-lock-plugin 实现分布式调度,保证集群环境下任务只执行一次:
java
@ScheduledJob(
name = "distributedTask",
cron = "0 */5 * * * ?",
distributed = true,
lockName = "distributed-task-lock"
)
public void distributedTask() {
// 分布式环境下,同一时间只有一个节点执行
}Actuator 端点
http
GET /actuator/scheduled-jobs响应示例:
json
{
"jobs": [
{
"name": "dailyReport",
"cron": "0 0 8 * * ?",
"status": "RUNNING",
"lastExecutionTime": "2025-12-05T08:00:00",
"nextExecutionTime": "2025-12-06T08:00:00"
}
]
}手动触发:
http
POST /actuator/scheduled-jobs/dailyReport/trigger