【问题标题】:Spring Boot, Cron job synchronizationSpring Boot、Cron 作业同步
【发布时间】:2018-06-07 08:34:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我认为没有现成的,您可以使用信号量或锁定系统。如果你在不同的服务器上运行,那么你可以使用数据库锁或分布式锁

标签: spring spring-boot cron spring-scheduled


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2020-03-24
    • 2021-07-10
    • 2021-02-27
    • 1970-01-01
    • 2019-03-09
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多