我知道可以以固定的速率,固定的延迟或使用克朗来运行计划。但是我该如何处理这种情况:
Method A (fixed delay 60 seconds but should never run if B or C is running)
Method B (supposed to run every hour and ALWAYS before C)
Method C (supposed to run 60 seconds after B has finished)
如何设置这些条件?
编辑:
我设法做到了,而且似乎可行:
@Scheduled(fixedDelay = 10000)
public void A() {
}
@Scheduled(fixedDelay = 60000)
public void BandC() throws InterruptedException {
MethodB
Thread.sleep(60000);
MethodC
}
这是正确的还是出于某种原因使它做错了?
答案 0 :(得分:0)
看看如何使用带有@SchedulerLock
批注的调度程序锁。这样可以确保仅一次运行A,B和C:
https://github.com/lukas-krecan/ShedLock
您可能必须在调度代码中提供一些其他信息,以确保C始终在B之后,但是如果正确设置了调度任务的开始时间,则锁定也将有助于强制执行该顺序。
或者在给定的时序条件下,您可以让B调度C在B终止时运行一次。锁定机制以及对C调度位置的一些思考可能会解决您的问题。