位置:首页 > 进阶教程 > 调度模块任务仓库配置驱动设计:从YAML加载任务

调度模块任务仓库配置驱动设计:从YAML加载任务

时间:2026-08-12  |  作者:极客少年  |  阅读:0

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

本文章代码: gitee , gitcode , github

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

摘要

为了让运维更省事、配置更高效,框架提供了通过 application.yml 声明定时任务的能力。

YamlTaskRepository 会把这些配置解析成 YamlTask 对象,并对外提供完整的增删改查接口。

接下来重点拆解配置结构、加载流程,以及它与 ScheduleTaskManager 之间的衔接方式。

1. 配置结构

tutorials4j:schedule:default-execution:initial-delay: 30s # 默认初始延迟max-failure-count: 3 # 默认最大失败次数tasks:syncOrderTask:class-simple-name: orderSyncRunnercron: "0 0/5 * * * "enabled: truedescription: "同步订单"metadata:source: "mysql"execution:max-execution-count: 100due-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

这套实现支持后续运行时增删改,包括 createupdatedelete

不过默认实现仅做内存操作,后续也可以替换为数据库版本。

3. 与调度器的集成

@Configurationpublic class ScheduleConfiguration { @Bean@ConditionalOnMissingBeanTaskRepository yamlTaskRepository(ScheduleProperties properties) { return new YamlTaskRepository(properties);}@BeanScheduleTaskManager scheduleTaskManager(TaskRepository repository,ObjectProvider consumers) { return new ScheduleTaskManager(repository, consumers.orderedStream().collect(Collectors.toList()));}}

Spring Boot 自动配置会将 YamlTaskRepository 作为默认 TaskRepository

ScheduleTaskManager 初始化时,会调用 taskRepository.findAll() 加载所有任务。

加载完成后,再逐一执行 addTask

4. 运维价值

  • 声明式配置:无需代码修改,即可调整任务 cron、开关状态、限流参数。
  • 可替换性:通过 @ConditionalOnMissingBean 允许用户自定义 TaskRepository,如从数据库或配置中心读取。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多