Spring Boot,Cron作业同步

问题描述 投票:2回答:1

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

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

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

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

spring spring-boot cron spring-scheduled
1个回答
4
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.