Skip to content

任务调度插件

企业级任务调度解决方案,基于 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

下一步

Released under the Apache License 2.0