如何根据虚拟托管时钟安排作业?

How to Schedule jobs based on virtual managed clock?

我正在开发一个 Spring 网络应用程序,分析来自连接对象的事件流。

此流不是实时的(数据每 X 分钟通过数据包报告一次)但事件按检测时间排序。

我想在给定时间在我的流程中的两个事件之间触发作业。

换句话说,我想要一个像 Quartz 或其他允许我使用与我的事件流速度相同的虚拟时钟(系统时钟除外)的库。

在我的用例中,我有室内存在和开门。

在其中一种情况下,我想在开门后 30 秒开始计数,并在开门 5 分钟后停止计数。

问题是,我已经在开门后30秒收到了事件,也许在10分钟后我会在开门后4分钟收到事件。

编辑:我不想根据服务器时间安排任务,但我希望能够自己管理时钟。

示例:我收到一个事件,我将虚拟时钟更改为事件创建日期,如果任务安排在新虚拟时钟之前,它将启动。

您可以尝试使用 Spring 调度程序(如果我正确理解您想要实现的目标):Spring Scheduler Tutorial

听起来像 java.util.Timer 这么简单的事情就可以完成这项工作。 当事件发生时,创建一个 30 秒的计时器。此计时器将触发开始计数存在,并将创建一个 4.5 分钟的计时器。当第二个计时器出现回调时,计数停止。

经过一些搜索,没有库可以满足我的需求,所以我自己以一种非常基本的方式实现了它(但足以满足我的用例)。

感谢所有试图帮助我的人。