要等到上一个运行完成后再运行吗?


@Scheduled(cron = "0 * * * * *")
public void doSomething() { ... }

只是想确保如果前一个没有及时完成,这个不会导致另一个运行?

如果不是,如何做到这一点?

我测试了Thread.sleep(),它似乎在等待,但不确定。我只是想确认一下。

如果这意味着它一次只运行一个,它是否等待,然后在前一个完成后立即运行?或者它跳过运行并等到下一个没有运行的计划时间?

在没有配置任务调度器的情况下,Spring使用Executors.newSingleThreadScheduledExecutor()执行cron任务。
@Scheduled配置的任务将在ScheduledThreadPoolExecutor单线程执行。
ScheduledThreadPoolExecutor使用DelayQueue调度任务。

因此,默认行为是任务将作为串行运行。在任务结束之前,它不会跳过运行。而下一次预定的时间是不确定的。