Java 如何阻止Spring@Scheduled排队作业
我使用@Scheduled注释每两分钟运行一次代码。然而,我们的工作往往会持续更长的时间。据我所知,@Scheduled注释将新作业排队,并在第一个作业完成后立即运行它们。我不希望这种情况发生。我希望只有一个正在运行的作业实例,没有排队的实例。我该怎么做Java 如何阻止Spring@Scheduled排队作业,java,spring,spring-scheduled,Java,Spring,Spring Scheduled,我使用@Scheduled注释每两分钟运行一次代码。然而,我们的工作往往会持续更长的时间。据我所知,@Scheduled注释将新作业排队,并在第一个作业完成后立即运行它们。我不希望这种情况发生。我希望只有一个正在运行的作业实例,没有排队的实例。我该怎么做 @Scheduled(cron = "0 */2 * * * ?") public void twoMinMethod() { // code here } 如果您不需要精确地在一分钟内运行作业,您可能希望切换到其他非crontab语
@Scheduled(cron = "0 */2 * * * ?")
public void twoMinMethod() {
// code here
}
如果您不需要精确地在一分钟内运行作业,您可能希望切换到其他非crontab语法,这将允许此类操作。下面的示例将执行该方法,在完成后等待两分钟,然后再次执行
@Scheduled(fixedDelay=120000)
public void twoMinMethod() { ... }
有关详细信息,请参阅。这取决于具体情况。如果您有一个具有多个线程的
TaskExecutor
,并且有空闲线程,那么您有多个并发执行。在池用完之前,根据所选策略,作业将排队、丢弃,否则您将收到异常。所以这要看情况而定。如果你想要一个单一的实例,你需要使用一个调度器,比如quartz,它提供了对这一点的支持。