Skip to content

Scheduler 常见问题

这一页集中回答接入 soulsoft_scheduler 时最容易遇到的几个问题。

通用问题

任务为什么没有执行

先按这个顺序检查:

  1. 是否调用了 scheduler.start()
  2. 任务是否已经通过 scheduleJob() 注册
  3. Cron 表达式是否正确
  4. 任务是否被暂停

如果是 Host 集成模式,再检查是否注册了 addSchedulerHostedService()

想做简单轮询,用 Cron 还是固定间隔

  • 固定每隔一段时间执行:优先 withIntervalTrigger()
  • 按自然时间点执行:用 withCronTrigger()

例如:

  • 每 30 秒同步一次缓存:间隔触发器
  • 每天凌晨 2 点跑清理:Cron

任务参数应该放哪

优先放 jobData

cangjie
job.withJobData { d => d.set<String>(“reportType”, “daily”) }

任务里通过 context.jobData.get<T>() 读取。

并发与执行

默认会并发执行同一个任务吗

不会。当前库默认是不并发执行同任务的。

如果显式调用了 allowConcurrencyExecution(),才会允许并发。

管理操作

可以批量暂停一组任务吗

可以。IScheduler 支持按匹配器批量操作:

cangjie
scheduler.pauseJobs { key => key.group == “reports” }

恢复和移除也有同类方法。

能力边界

当前支持分布式协调吗

从当前公开源码和 README 看,稳定公开能力主要是单机调度、Host 集成、Cron/间隔触发、任务监听和任务数据。文档暂时不把”分布式协调”作为现有能力说明,避免写出与代码不一致的内容。