[059][调度模块]配置驱动的任务仓库 – 从 YAML 加载任务

简介: 本文介绍基于YAML配置驱动的任务仓库实现,支持通过`application.yml`声明定时任务(cron、开关、重试等),`YamlTaskRepository`自动解析并提供CRUD接口,无缝集成`ScheduleTaskManager`,兼顾运维灵活性与扩展性。

[059][调度模块]配置驱动的任务仓库 – 从 YAML 加载任务

本文章代码: gitee , gitcode , github

摘要

为了方便运维和快速配置,框架支持通过 application.yml 定义定时任务。YamlTaskRepository 将配置解析为 YamlTask 对象,并暴露增删改查接口。本文解析配置结构、加载流程及与 ScheduleTaskManager 的集成。

1. 配置结构

tutorials4j:
  schedule:
    default-execution:
      initial-delay: 30s   # 默认初始延迟
      max-failure-count: 3 # 默认最大失败次数
    tasks:
      syncOrderTask:
        class-simple-name: orderSyncRunner
        cron: "0 0/5 * * * ?"
        enabled: true
        description: "同步订单"
        metadata:
          source: "mysql"
        execution:
          max-execution-count: 100
          due-date: "2025-12-31T23:59:59Z"
      # 更多任务...
  • TaskOptions 映射单个任务配置,TaskExecutionOptions 可覆盖全局默认值。
  • YamlTask.of(TaskOptions) 负责转换为领域对象 YamlTask。

2. YamlTaskRepository 初始化

public YamlTaskRepository(ScheduleProperties properties) {
   
    properties.getTasks().forEach((name, opts) -> {
   
        if (!opts.validate()) throw new IllegalArgumentException(...);
        YamlTask task = YamlTask.of(opts);
        task.setName(name);
        taskMap.put(name, task);
    });
}
  • 构造函数中完成解析,存入 ConcurrentHashMap。
  • 支持后续运行时增删改(create、update、delete),但默认实现仅做内存操作,可被替换为数据库版本。

3. 与调度器的集成

@Configuration
public class ScheduleConfiguration {
   
    @Bean
    @ConditionalOnMissingBean
    TaskRepository<?> yamlTaskRepository(ScheduleProperties properties) {
   
        return new YamlTaskRepository(properties);
    }

    @Bean
    ScheduleTaskManager scheduleTaskManager(
            TaskRepository<?> repository,
            ObjectProvider<ChangeStatusEventConsumer> consumers) {
   
        return new ScheduleTaskManager(repository, consumers.orderedStream().collect(Collectors.toList()));
    }
}
  • Spring Boot 自动配置将 YamlTaskRepository 作为默认 TaskRepository。
  • ScheduleTaskManager 初始化时会调用 taskRepository.findAll() 加载所有任务并逐一 addTask。

4. 运维价值

  • 声明式配置:无需代码修改即可调整任务 cron、开关状态、限流参数。
  • 可替换性:通过 @ConditionalOnMissingBean 允许用户自定义 TaskRepository(如从数据库或配置中心读取)。
目录
相关文章
|
3月前
|
缓存 NoSQL 安全
[036][缓存模块]基于 Redis 自定义缓存锁的设计与实现
本文介绍基于Redis的轻量级分布式缓存锁组件,通过`@RedisLockable`注解+ AOP + Lua脚本,支持固定租期与自动续期双模式,解决缓存击穿、重复计算与资源竞争问题,具备声明式、动态Key、原子性及安全释放等特性,代码开源可扩展。(239字)
126 2
|
2月前
|
安全 Java 数据安全/隐私保护
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
本项目基于Spring拦截器实现声明式验证码认证,通过`@CaptchaAuth`注解与`CaptchaAuthHandlerInterceptor`解耦校验逻辑,支持图形/短信/邮件等多类型验证码。工厂模式扩展灵活,零侵入业务代码,兼容Spring Security,适用于登录、敏感操作等场景。(239字)
87 1
|
3月前
|
人工智能 运维 数据可视化
2026年变电站数字孪生开发解决方案-运维篇-预测性维护、智能巡检与多物理场仿真
2026年变电站数字孪生开发解决方案-运维篇-预测性维护、智能巡检与多物理场仿真
|
3月前
|
缓存 NoSQL Java
[065][缓存模块]Hibernate二级缓存自定义实现:基于Spring Cache的多级缓存适配器
本文介绍了一种基于Spring Cache的Hibernate二级缓存自定义实现,通过适配`DomainDataStorageAccess`与`RegionFactoryTemplate`,统一ORM与应用层缓存。支持本地(Caffeine)、远程(Redis)、多级及租户隔离等灵活策略,配置即生效,无缝集成Spring Boot生态。(239字)
91 2
|
3月前
|
安全 调度 数据库
[062][调度模块]任务全生命周期管理 —— 从启动到追踪的完整闭环
本文详解调度模块任务全生命周期管理:涵盖启动/取消协调(ScheduleService)、三级数据聚合(DB+内存+运行态)、运行态安全校验及规格模式分页查询,实现高可用、强一致的任务闭环管控。(239字)
79 1
|
3月前
|
NoSQL Java 调度
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
本文深度对比调度模块中Redis原生锁与Redisson锁:前者轻量但功能简陋(无重入、无阻塞),需手动续期;后者支持可重入、自动看门狗续期、阻塞等待,API友好但依赖较重。结合场景选型更可靠。(239字)
147 1
|
3月前
|
存储 缓存 NoSQL
[038][验证码模块]基于 Hutool 的 Spring Boot 验证码组件设计与实现
本文介绍基于Hutool与Spring Boot深度集成的验证码组件,支持线段、圆圈、扭曲、GIF四类验证码,具备自动配置、多级缓存(Caffeine+Redis)、高斯模糊增强、忽略大小写校验及一次性使用等特性,架构清晰、扩展性强,开箱即用。
124 2
|
3月前
|
消息中间件 Prometheus 监控
[058][调度模块]任务生命周期事件与监听器机制
本文介绍调度模块的任务生命周期事件机制,通过`ChangeStatusEvent`事件与`ChangeStatusEventConsumer`监听器,实现任务状态(CREATED/STARTED/COMPLETED等)变更的灵活监听。支持日志、持久化、消息推送等扩展,具备高解耦性与异常隔离能力。(239字)
115 2
|
3月前
|
缓存 NoSQL Java
[037][缓存模块]基于 Guava Striped 的声明式本地锁设计与实现
本文介绍基于Guava Striped与Spring AOP实现的声明式本地锁:通过`@LocalLockable`注解+SpEL动态生成细粒度锁key,支持超时控制与中断处理,内存可控、低延迟,适用于单机高并发场景。
104 1
|
3月前
|
NoSQL 调度 Redis
[057][调度模块]分布式环境下定时任务的防重复执行方案
本文介绍分布式定时任务防重复执行方案,基于Redis/Redisson分布式锁,提供自动续期与固定租期两种模式,通过`key()`控制锁粒度,支持异常跳过与自定义处理,确保集群中同一任务仅单点执行。代码开源。
154 1

热门文章

最新文章