@Scheduled(cron = "0 * * * * *")
public void doSomething() { ... }
只是想确保如果前一个没有及时完成,这个不会导致另一个运行?
如果不是,如何做到这一点?
我测试了Thread.sleep(),它似乎在等待,但不确定。我只是想确认一下。
如果这意味着它一次只运行一个,它是否等待,然后在前一个完成后立即运行?或者它跳过运行并等到下一个没有运行的计划时间?
在没有配置任务调度器的情况下,Spring使用Executors.newSingleThreadScheduledExecutor()
执行cron
任务。@Scheduled
配置的任务将在ScheduledThreadPoolExecutor
单线程执行。ScheduledThreadPoolExecutor
使用DelayQueue
调度任务。
因此,默认行为是任务将作为串行运行。在任务结束之前,它不会跳过运行。而下一次预定的时间是不确定的。