我有带有 Spring Batch 和 Spring Scheduler 的 Spring Boot 应用程序。当我尝试使用 @Scheduled 注释启用调度时,我看到两个执行正在运行,一个在主线程中,一个在计划中。我尝试在 @Scheduled 注释中添加初始延迟,但如果主线程花费的时间稍长于此延迟,则当调度程序尝试启动批处理作业时会抛出错误。
如何控制这种行为?我不希望主线程运行,或者我希望计划任务仅在主线程完成后才启动。
如果你想使用
@Scheduled
那么你需要使用分布式锁比如ShedLock:
https://github.com/lukas-krecan/ShedLock
如果您有更大的灵活性并且愿意接受其他事物,您可以使用完全不同的任务调度系统,例如db-scheduler: