作者:互联网 时间: 2026-08-19 20:10:55
处理[059][调度模块]配置驱动的任务仓库 – 从 YAML 加载任务这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。
本文章代码: gitee , gitcode , github
![[059][调度模块]配置驱动的任务仓库 – 从 YAML 加载任务](https://images.bobobaike.com/uploads/20260819/img_6a859d4ed216530.webp)
为了方便运维和快速配置,框架支持通过 application.yml 定义定时任务。YamlTaskRepository 将配置解析为 YamlTask 对象,并暴露增删改查接口。本文解析配置结构、加载流程及与 ScheduleTaskManager 的集成。
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。 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),但默认实现仅做内存操作,可被替换为数据库版本。 @Configurationpublic class ScheduleConfiguration { @Bean@ConditionalOnMissingBeanTaskRepository<?> yamlTaskRepository(ScheduleProperties properties) { return new YamlTaskRepository(properties);}@BeanScheduleTaskManager scheduleTaskManager(TaskRepository<?> repository,ObjectProvider<ChangeStatusEventConsumer> consumers) { return new ScheduleTaskManager(repository, consumers.orderedStream().collect(Collectors.toList()));}} Spring Boot 自动配置将 YamlTaskRepository 作为默认 TaskRepository。 ScheduleTaskManager 初始化时会调用 taskRepository.findAll() 加载所有任务并逐一 addTask。 @ConditionalOnMissingBean 允许用户自定义 TaskRepository(如从数据库或配置中心读取)。