如何等待@Scheduled直到上一个任务未完成?

时间:2019-01-04 09:50:40

标签: java spring spring-boot spring-mvc

我要唤醒我的调度程序直到任务完成。如果有时间执行第二个调度程序,它必须等到上一个任务完成为止。 我在Java Boot应用程序中使用@Schedule。 我想每5分钟将数据插入数据库一次,但我想保留我的日程表,直到插入数据不完整为止,仍有时间进行第二次执行。演示代码

@Scheduled(fixedRate = 2000)
    public void scheduleTaskWithFixedRate() {
        logger.info("Fixed Rate Task :: Execution Time - {}", dateTimeFormatter.format(LocalDateTime.now()) );
    }

3 个答案:

答案 0 :(得分:1)

使用fixedRate代替fixedDelay

@Scheduled(fixedDelay = 2000)

任务将连续fixedDelay毫秒运行一次

  

在上一次调用的结束与下一次调用的开始之间以固定的毫秒数为周期执行带注释的方法。

答案 1 :(得分:1)

使用fixedDelay

fixedRate:使Spring定期运行任务,即使最后一次调用可能仍在运行。

fixedDelay:特别控制上一次执行完成时的下一次执行时间。 在代码中:

@Scheduled(fixedDelay=5000)
public void updateEmployeeInventory(){

}    

@Scheduled(fixedRate=5000)
public void updateEmployeeInventory(){

}

答案 2 :(得分:0)

@Scheduled(fixedDelay = 1000, initialDelay = 1000)

您应该将 initialDelay 道具与 @scheduled 注释一起使用,以便等待一段时间。