Spring Boot 在特定日期安排任务与数据

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

我们有一个事件资源,它有一个 ZoneDateTime 表示其开始时间戳以及唯一标识符(主键)。用户可以签入事件。目标是安排在事件开始时间戳前一小时执行的任务,以便通过我们的推送通知服务通知签入此事件的用户。

解决方案需要可扩展,并且能够让任务引用相应的 eventId,以便我们可以确定签入的用户。该任务还需要以编程方式进行计划,因为每个事件都有不同的开始时间。

我正在寻找一个好的资源或工具来使用。除非我遗漏了什么,否则 Spring Boot 的本机调度程序似乎无法执行此任务。我也研究过 Quartz,但我不确定如何处理将特定事件 id 与计划任务一起存储的要求。

由于这是我第一次安排这样的事情,我将不胜感激您能给我的任何资源或想法。

spring spring-boot scheduled-tasks quartz-scheduler
1个回答
0
投票

您需要一种更抽象的方法来解决您的问题。

您不需要安排每个活动,您只需要安排下一个活动。如果调度程序触发并执行,您必须做更多的工作:

  • 用他应该做的任何事情来执行你的任务
  • 完成此操作后,请求您的数据库下一个事件是什么,然后从头开始

使用这种方法,您不会遇到扩展问题,因为您只安排了 1 个活动。


注意:这是一种非常简单的方法。您可以根据您的具体问题进行调整:

  • 如果活动重新安排会发生什么?
    • 如果它没有成为下一个事件,那没什么,但如果它发生了,你需要取消当前的安排并开始这个新的安排。
  • 如果活动被取消会怎样?
    • 如果不是下一个事件,则不再发生,但如果是,则再次取消调度程序并进行下一个
  • 如果有很多事件彼此接近(我说的是纳/毫秒),会发生什么,因为执行只需要时间,因此你可能会错过一些事件。
    • 这个比较困难。您可能不再处理单个事件,而是处理一组事件。你仍然只有 1 个调度程序,但他会执行多个事件。您必须使上述所有问题适应这种新行为。
© www.soinside.com 2019 - 2024. All rights reserved.