在我的Spring Boot应用程序中,根据Cron作业(每5分钟运行一次),我需要在数据库中处理2000个产品。
目前,这2000种产品的加工时间超过5分钟。我遇到的问题是,当第一个Cron作业尚未完成时,第二个Cron作业就会运行。
Spring/Cron中是否有开箱即用的功能,允许同步这些作业,并在启动下一个作业之前等待前一个作业完成?
请告诉我如何正确地实施这样的系统。无论如何,以下技术也可用于Neo4j,MongoDB,Kafka。请建议如何单独使用Spring/Cron,甚至与所提到的技术一起正确设计/实现此功能。
发布于 2017-12-27 00:14:21
1)您可以尝试使用@Scheduled(fixedDelay = 5*60*1000)。它将保证下一次调用将严格地在前一次调用完成后的5分钟内发生。但这可能会破坏您的日程安排要求。
2)您可以将底层ThreadExecutor的池大小限制为1个线程,因此下一次调用必须等到前一次调用完成,但这可能会再次破坏逻辑,因为它会影响@Scheduled调用的所有周期性任务
3)你可以使用Quartz而不是spring的原生@Scheduled。它的配置比较复杂,但允许通过@DisallowConcurrentExecution注释或通过在作业详细信息中设置JobDetail::isConcurrentExectionDisallowed来实现所需的行为
https://stackoverflow.com/questions/47979619
复制相似问题