[058][调度模块]任务生命周期事件与监听器机制

简介: 本文介绍调度模块的任务生命周期事件机制,通过`ChangeStatusEvent`事件与`ChangeStatusEventConsumer`监听器,实现任务状态(CREATED/STARTED/COMPLETED等)变更的灵活监听。支持日志、持久化、消息推送等扩展,具备高解耦性与异常隔离能力。(239字)

[058][调度模块]任务生命周期事件与监听器机制

摘要

为了便于监控、审计或联动其他系统,框架定义了 ChangeStatusEvent 事件和 ChangeStatusEventConsumer 接口,使外部可以订阅任务状态变化。本文分析事件产生、消费流程及扩展方式。

1. 事件定义

@Builder
public record ChangeStatusEvent(
    Instant timestamp,
    String taskName,
    TaskStatusEnum taskStatus,
    TaskCondition lastTaskCondition,
    String message,
    Throwable throwable
) {
   }

状态包括:CREATEDSTARTEDCOMPLETEDSTOPPEDCANCELLEDEXCEPTION

2. 事件触发点

ScheduleTaskManager 中,每个关键操作都会调用 notifyListeners()

private void startEvent(String taskName) {
   
    notifyListeners(taskName, TaskStatusEnum.STARTED, null, null);
}
private void stopEvent(String taskName, String message) {
   
    doCancelTask(taskName);
    notifyListeners(taskName, TaskStatusEnum.STOPPED, message, null);
}
// 类似地,completeEvent, failureEvent, cancelEvent...

3. 消费者注册

ScheduleTaskManager 构造函数接收 ObjectProvider<ChangeStatusEventConsumer>,将所有实现了该接口的 Bean 收集起来:

public ScheduleTaskManager(TaskRepository<?> taskRepository,
                           List<ChangeStatusEventConsumer> consumers) {
   
    this.taskRepository = taskRepository;
    this.consumers = consumers;
}

消费者可以是任何 Spring Bean,例如:

@Component
@Slf4j
public class LoggingEventConsumer implements ChangeStatusEventConsumer {
   
    @Override
    public void consumer(ChangeStatusEvent event) {
   
        log.info("任务 {} 状态变为 {}", event.taskName(), event.taskStatus());
    }
}

4. 扩展点

  • 持久化事件到数据库,用于历史追踪。
  • 通过消息队列将事件转发到其他微服务。
  • 结合监控系统(如 Prometheus)实时上报任务执行情况。

5. 设计优势

  • 解耦:任务调度核心不关心事件被如何使用,只需广播。
  • 多监听器:支持任意数量的消费者,且异常隔离(单个消费者异常不影响其他消费者)。
目录
相关文章
|
2月前
|
存储 算法 数据安全/隐私保护
为什么RAR有RAR3、RAR5,唯独没有RAR4?一文彻底搞懂RAR加密原理与密码恢复
本文揭秘RAR格式命名之谜:所谓“消失”的RAR4实为RAR3(Format 2.9)的历史别称;梳理RAR2→RAR3→RAR5演进脉络,详解AES-128到AES-256、SHA-1到PBKDF2的加密升级,并解析密码恢复工具为何只标“RAR3/RAR5”——关键在加密结构,不在版本号。(239字)
387 6
|
14天前
|
Oracle Java 关系型数据库
Linux 安装 JDK 环境
由于 JDK1.8.202 是最后一个免费版本,建议下载此版本。由于在 Oracle 官方网站下载需要登录,可通过华为云镜像下载。
216 1
Linux 安装 JDK 环境
|
2月前
|
缓存 Java 数据库连接
[053][核心模块]Java枚举缓存与ORM集成实践
本文介绍Java枚举缓存与ORM(MyBatis/JPA)的通用集成方案:通过`EnumCache`双向哈希缓存(O(1)查找)、`BaseEnum`统一接口及自动注册的类型转换器,解决枚举查值性能低、重复编码、缓存不一致等痛点,提升可维护性与运行效率。(239字)
158 3
|
20天前
|
存储 缓存 NoSQL
[038][验证码模块]基于 Hutool 的 Spring Boot 验证码组件设计与实现
本文介绍基于Hutool与Spring Boot深度集成的验证码组件,支持线段、圆圈、扭曲、GIF四类验证码,具备自动配置、多级缓存(Caffeine+Redis)、高斯模糊增强、忽略大小写校验及一次性使用等特性,架构清晰、扩展性强,开箱即用。
57 2
|
22天前
|
存储 人工智能 运维
阿里云OSS对象存储服务平台新版功能介绍:对象+向量+表格三桶合一,AI原生多模态存储新底座
阿里云对象存储OSS作为全球领先的海量、安全、低成本、高持久的云存储服务,新版在**多模态存储架构、AI原生能力、数据管理、安全合规、自动化运维、生态集成**六大方向实现全面升级,构建起“对象桶+向量桶+表格桶”三位一体的完整产品家族,成为覆盖非结构化数据、向量数据与结构化数据的AI原生统一存储底座。新版依托全球2800+边缘节点、99.9999%数据可靠性、EB级弹性扩展能力,为图片、视频、文档、日志、AI数据集、结构化数据等全类型数据提供一站式存储、管理、分析与计算服务,彻底解决传统存储“容量有限、类型单一、管理复杂、成本高昂、AI能力缺失”等痛点,全面满足企业数字化转型、AI应用落地、数
200 4
|
22天前
|
存储 人工智能 自然语言处理
韩国公职机构仿冒无到场代理采购诈骗机理、风险与全域协同防御研究
本文基于《朝鲜日报》2026年深度报道,聚焦韩国增速最快的新型电诈——“无到场代理采购诈骗”,系统拆解其社会工程诱导逻辑、伪造资质手段与跨境黑产链路;依托FIU数据量化风险,并创新提出芦笛多源特征联动检测框架,构建覆盖事前预警、事中拦截、事后溯源的闭环防御体系,为东亚商事场景公职仿冒类反诈提供实证方案。(239字)
58 2
|
22天前
|
缓存 NoSQL Java
[037][缓存模块]基于 Guava Striped 的声明式本地锁设计与实现
本文介绍基于Guava Striped与Spring AOP实现的声明式本地锁:通过`@LocalLockable`注解+SpEL动态生成细粒度锁key,支持超时控制与中断处理,内存可控、低延迟,适用于单机高并发场景。
61 1
|
22天前
|
Web App开发 测试技术 iOS开发
2026 Burp 代理设置教程:从浏览器抓包到 HTTPS 证书配置
初学者用Burp Suite抓包常卡在代理配置:HTTP无响应、HTTPS证书错误,本质是浏览器→Burp→目标服务器的路径未打通。本文按实战顺序详解Burp监听、浏览器代理(Chrome/Edge/Firefox)、CA证书安装(Win/macOS/Firefox独立导入)三步闭环,助你5分钟跑通基础抓包。
|
22天前
|
设计模式 人工智能 监控
智能体工作流引擎设计:LangGraph与状态机在企业生产中的应用
本文剖析企业级AI Agent工作流核心架构,对比状态机(强确定性、易审计)与LangGraph(图结构、动态规划)两大范式,提出“外层状态机+内层LangGraph”的混合生产模式,并详解状态持久化、事件溯源、人机协同、工具隔离等高可靠设计实践。
142 1
|
22天前
|
Web App开发 人工智能 JavaScript
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!
dashi-ppt-skill是一款开源AI PPT技能(4.3k stars),突破行业痛点:生成后可实时编辑。支持12套主题、1020种版式、8576个控件,网页端可视化修改(拖拽/换色/调图表),一键导出真正可编辑的PPTX(文字/图表保留可修改性),全程本地运行,商业文档零上传。
259 0
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!