Spring Boot,定时任务同步

3
在我的Spring Boot应用程序中,基于Cron任务(每5分钟运行一次),我需要处理数据库中的2000个产品。
当前,这2000个产品的处理时间超过了5分钟。当第一个Cron任务尚未完成时,我遇到了第二个Cron任务运行的问题。
在Spring / Cron中是否有开箱即用的功能,可以同步这些作业,并在启动下一个作业之前等待上一个作业完成?
请指导如何正确实现这种系统。无论如何,还可以使用Neo4j、MongoDB、Kafka等技术。请指导如何使用Spring / Cron分别或与上述技术一起正确设计/实现此功能。

1
我认为没有现成的解决方案,您可以使用信号量或锁定系统。如果您在不同的服务器上运行,则可以使用数据库锁或分布式锁。 - pvpkiran
1个回答

6

1) 您可以尝试使用@Scheduled(fixedDelay = 5*60*1000)。它将确保下一次调用在上一次完成后严格在5分钟内发生。但这可能会破坏您的调度要求。

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

3) 您可以使用Quartz而不是Spring的本机@Scheduled。 它更复杂地进行配置,但允许通过@DisallowConcurrentExecution注释或通过在作业详细信息中设置JobDetail::isConcurrentExectionDisallowed来实现所需的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接