Spring Boot,Cron作业同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot,Cron作业同步相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

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

以上是关于Spring Boot,Cron作业同步的主要内容,如果未能解决你的问题,请参考以下文章

cron spring boot

AWS Beanstalk 中 Spring cron 作业的双重执行(2 个线程)

Spring boot:thymeleaf 没有正确渲染片段

Spring boot创建定时任务

在Spring中运行SAME cron作业的多个实例

如何在 Spring Boot REST 应用程序中重用类?