[056][调度模块]RunnableDecorator – 任务执行的增强装饰器

简介: `RunnableDecorator` 是调度模块中的增强装饰器,同时实现 `Runnable` 与 `Trigger` 接口,统一管理任务执行逻辑与触发策略,支持次数限制、失败重试、初始延迟、截止日期等高级控制,并自动记录执行历史,实现业务与调度逻辑解耦。(239字)

[056][调度模块]RunnableDecorator – 任务执行的增强装饰器

摘要

调度框架不仅要“按时执行”,还需支持执行次数限制、失败重试上限、初始延迟、截止日期等高级特性。本文分析 RunnableDecorator 如何同时实现 RunnableTrigger 接口,统一封装执行控制与下一次执行时间计算。

1. 双重职责:执行逻辑 + 触发逻辑

public class RunnableDecorator implements Runnable, Trigger {
   
    private final Task task;
    private final TaskRunner runner;
    private CronTrigger cronTrigger;
    // 统计字段与回调函数...
}
  • 作为 Runnable:在 run() 中执行真正的业务逻辑,并记录开始/完成/失败事件。
  • 作为 Trigger:在 nextExecution(TriggerContext) 中根据 cron、最大执行次数、最大失败次数、截止日期等决定是否继续调度。

2. 丰富的执行控制策略

@Override
public Instant nextExecution(TriggerContext triggerContext) {
   
    // 超过最大执行次数
    if (maxExecutionCount != null && maxExecutionCount <= totalCount.get()) {
   
        stopEvent.accept(...);
        return null;
    }
    // 超过最大失败次数
    if (maxFailureCount != null && maxFailureCount <= totalFailureCount.get()) {
   
        stopEvent.accept(...);
        return null;
    }
    // 超过截止日期
    Instant dueDate = task.getDueDate();
    if (dueDate != null && dueDate.isBefore(next)) {
   
        stopEvent.accept(...);
        return null;
    }
    // 第一次执行增加 initialDelay
    if (totalCount.get() == 0) {
   
        return next.plusMillis(task.getInitialDelay().toMillis());
    }
    return next;
}
  • 失败计数:每次任务抛出异常时,failureEvent 回调自增 totalFailureCount
  • 执行次数:每次 run() 开始前,startEvent 自增 totalCount
  • 初始延迟:首次执行时在 cron 计算结果上额外延迟,避免任务一启动就立即运行。

3. 执行历史记录

private final Queue<TaskCondition> taskConditionHistory = EvictingQueue.create(30);
  • 使用 Guava 的 EvictingQueue 保留最近 30 次执行记录,可用于监控、审计或自动重试决策。
  • 每次执行完成后生成 TaskCondition(包含起止时间、错误信息等)并存入队列。

4. 设计价值

将控制逻辑与业务逻辑彻底分离,使得开发者只需关注 doRun() 实现,而执行策略(限流、延迟、截止)由框架统一管理,符合“开闭原则”。

目录
相关文章
|
5天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1904 5
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
13天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2509 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
13天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
1367 2
|
11天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
1216 2
|
15天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
1396 53
|
12天前
|
自然语言处理 测试技术 API
通义千问Qwen3.8-Max-Preview全功能解析:2.4万亿参数旗舰模型深度使用指南
在大模型技术持续迭代的当下,通义千问推出的Qwen3.8-Max-Preview作为新一代旗舰预览版模型,凭借2.4万亿参数的超大规模、多模态融合能力与全场景适配特性,成为开发者与企业用户探索AI应用的核心工具。该模型采用稀疏混合专家(MoE)架构,是通义千问首个突破万亿参数的多模态模型,可同时处理文本、图像、视频与文档等多种数据形态,在全栈代码开发、复杂逻辑推理、长文档分析与多智能体协作等场景实现跨越式升级。本文将全面拆解Qwen3.8-Max-Preview的核心功能,详解API调用流程与配置方法,覆盖多场景实战技巧,帮助用户快速掌握这款旗舰模型的使用方法,充分释放其性能潜力。
645 2
|
12天前
|
SQL 关系型数据库 MySQL
【2026最新】DBeaver下载、安装、数据库管理一篇搞定(附官网社区版安装包)
DBeaver是一款免费开源的跨平台通用数据库管理工具,支持MySQL、PostgreSQL、SQLite、Oracle等几乎所有主流数据库,无需为每种数据库安装独立客户端,极大提升开发与数据分析效率。