Spring Boot,Cron作业同步

时间:2017-12-26 13:58:39

标签: spring spring-boot cron spring-scheduled

在我的Spring Boot应用程序中,基于Cron作业(每5分钟运行一次),我需要在我的数据库中处理2000个产品。

目前,这2000款产品的处理时间超过5分钟。当第一个Cron作业尚未完成时,我遇到了第二个Cron作业运行的问题。

Spring / Cron中是否有开箱即用的功能,可以在开始下一个作业之前同步这些作业并等待上一个作业完成?

请告知如何正确实施此类系统。无论如何,以下技术也可用Neo4j,MongoDB,Kafka。请告知如何使用Spring / Cron单独或甚至与上述技术一起正确设计/实现此功能。

1 个答案:

答案 0 :(得分:5)

1)您可以尝试使用@Scheduled(fixedDelay = 5*60*1000)。它将保证下一次调用将在前一次调用完成后的5分钟内严格执行。但这可能会破坏您的日程安排要求

2)您可以将底层ThreadExecutor的池大小限制为1个线程,因此下一个调用必须等到上一个完成,但这又会破坏逻辑,因为它会影响{{{ 1}}

3)您可以使用Quartz而不是spring的原生@Scheduled。配置起来比较复杂,但允许通过@Scheduled注释或通过在作业详细信息中设置@DisallowConcurrentExecution来实现所需的行为