当前位置: 首页 > 知识库问答 >
问题:

Spring Boot,Cron作业同步

太叔超英
2023-03-14

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

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

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

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

共有1个答案

林浩漫
2023-03-14

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

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

3) 您可以使用Quartz代替spring的原生@Scheduled。它的配置更加复杂,但允许通过@DisallowConcurrentExecution注释或通过在作业详细信息中设置JobDetail::IsConcurrentExecutionDisallowed来实现所需的行为

 类似资料:
  • 我想为我的应用程序安排cron作业来完成特定的任务。我如何在这个需求中安排? 要求:cron数据。js应每周一至周五每小时运行一次,时间为上午9:30至下午3:30。

  • 我必须执行简单的cron作业。例如,每天上午10点,我必须打开一个链接,然后链接做所有的工作。为此,我使用cron-job.org。 然而事情变得复杂了,我需要一个关于我应该如何进行的建议。 这个任务很简单,每天在某个时间,我必须执行这个作业(打开一个链接),但是这个时间是动态的,我从JSON数据中获取。 真正的问题是,我需要在每天00:00阅读一个json,其中包含作业在该特定日子必须执行的时间

  • 我希望每天早上9点完成一项任务。我得到了一些有趣的结果。目前我的工作是这样的: 这是怎么回事?这是正确的表达吗?

  • 问题内容: 我有一个必须执行重复任务的Web应用程序,发送消息和警报,我已经使用脚本页面在浏览器中加载它们时执行了这些任务,即http://example.com/tasks.php,我已经在我的Web应用程序的每个页面中都使用iframe表示。 现在,我想将其更改为使用CRON作业,因为第一种方法可能会导致卡纸性能,因此,我如何制作访问http://example.com/tasks.php的C

  • 我有一个webapp在Kubernetes集群的Docker-container中运行。该应用程序有一个endpoint,我想定期调用。应用程序在多个节点/吊舱上运行,重要的是只有一个节点执行endpoint发起的任务。我查看了Kubernetes Cron作业,但没有找到任何关于从Kubernetes Cron作业调用endpoint的文档。有人对解决这个问题有什么建议吗?在只有一个节点执行任务