Scheduler 快速开始
这一页只做一件事:让你先跑通一个最小可工作的定时任务。
适用场景
- 第一次接触
soulsoft_scheduler - 想先验证任务能不能按时间触发
- 还不关心 DI、Host 集成和复杂调度规则
核心问题
soulsoft_scheduler 的最小使用路径很短:
- 定义一个实现
IJob的任务类 - 用
JobBuilder定义触发器和标识 - 用
SchedulerBuilder构建调度器并启动
快速开始
Cron 触发器
先看这几行:IJob、withCronTrigger()、scheduleJob()、start()。
cangjie
import soulsoft_scheduler.*
import soulsoft_scheduler.abstractions.*
public class CleanupJob <: IJob {
public func execute(_: IJobContext): Unit {
println("cleanup: ${DateTime.now().format('yyyy-MM-dd HH:mm:ss')}")
}
}
main(): Int64 {
let scheduler = SchedulerBuilder().build()
let jobDetail = JobBuilder
.create<CleanupJob>()
.withCronTrigger("*/5 * * * * ?")
.withIdentity("cleanup")
.build()
scheduler.scheduleJob(jobDetail)
scheduler.start()
return 0
}这段代码的含义很直接:
CleanupJob是实际执行的任务withCronTrigger("*/5 * * * * ?")表示每 5 秒触发一次withIdentity("cleanup")给任务一个唯一标识scheduler.start()启动调度循环
固定间隔触发器
如果你不想写 Cron,直接用间隔触发器:
cangjie
let jobDetail = JobBuilder
.create<CleanupJob>()
.withIntervalTrigger(Duration.second * 5)
.withIdentity("cleanup")
.build()适合这种场景:
- 每隔固定时间执行
- 不需要按"某天某时"表达规则
- 先做本地验证
关键角色
| 角色 | 作用 |
|---|---|
IJob | 定义任务执行逻辑 |
JobBuilder | 定义任务、触发器、标识、数据 |
IScheduler | 管理任务注册、暂停、恢复、启动、停止 |
SchedulerBuilder | 组装调度器实例 |
常见用法
带任务数据的调度
任务参数优先放进 jobData,不要硬编码到任务类里:
cangjie
let jobDetail = JobBuilder
.create<ReportJob>()
.withCronTrigger("0 0 8 * * ?")
.withIdentity("daily-report", "reports")
.withJobData { d =>
d.set<String>("reportType", "daily")
d.set<Int64>("retryCount", 3)
}
.build()暂停和恢复
cangjie
scheduler.pauseJob(Key("cleanup"))
scheduler.resumeJob(Key("cleanup"))常见问题
Cron 和间隔触发器怎么选
- 按自然时间点(每天2点、每周一8点)→ Cron
- 固定每隔一段时间(每30秒、每5分钟)→ 间隔触发器
start() 之后主线程会怎样
scheduler.start() 不会阻塞主线程——调度器在内部线程中执行。如果你的 main() 需要保持运行,用 sleep() 或配合 Host 生命周期。
相关专题
- 需要了解 Cron 语法细节 → Cron 表达式
- 需要了解任务和触发器的完整 API → 任务与触发器
- 需要接入 DI 和 Host 生命周期 → 与 Host / DI 集成
- 需要看更多常见问题 → Scheduler 常见问题