跳转到内容

定时任务

定时任务模块同时管理 Solon @Scheduled 系统任务和页面创建的动态任务。动态任务只能选择后端通过 @ScheduledJobHandler 加入白名单的无参方法,不能输入任意类名、SQL 或脚本。

@Component
public class DataSyncTask {
/** 周期同步业务数据。 */
@Scheduled(name = "dataSync", cron = "0 0/5 * * * ? *", zone = "Asia/Shanghai")
public void execute() {
// 执行业务同步
}
}

任务名称用于持久化配置、集群锁和执行记录,发布后不要随意修改。

@Component
public class DataSyncService {
/** 提供给后台任务编排的白名单方法。 */
@ScheduledJobHandler(key = "data.sync", description = "同步业务数据")
public void sync() {
// 执行业务同步
}
}

处理器必须是 Solon Bean 中的 public、非 static、无参数、void 方法。新增动态任务固定为停用状态,必须由独立启用操作开启。

一次触发及其重试共享 executionId,尝试次数为 1 + maxRetries。启用重试时并发策略必须为 FORBID。执行状态包括 SUCCESS、FAILED、RETRY 和 SKIPPED。

立即执行是异步提交,接口成功仅表示进入本节点队列,最终结果以执行日志为准。单节点手动任务并发上限由 JIMU_SCHEDULING_MANUAL_MAX_CONCURRENT 控制,默认 16。

MySQL 保存任务定义和运行配置,Redis 用于周期认领、互斥锁、服务端时间、变更通知和故障接管。Redis 不可用时任务失败关闭,不会退化为每个节点各自执行。

集群提供至少一次语义,不是严格一次。任务处理器必须通过唯一约束、状态机或外部幂等请求号避免重复副作用。

管理接口位于 /monitor/job,并分别使用列表、新增、编辑、删除、启停、执行与日志权限标识。

完整的补偿、租约、代际隔离和 Quartz 替换说明见定时任务完整说明。