2016-10-27 49 views
0

我不知道这是否是一个真正的问题或不...但我想知道如何你们中的一些将接近这个...春季启动 - 检查是否达到目标日期对象

我有一个Spring Boot应用程序。 然后我有一个Interruttore.class,其中包括这个字段timeoutDate这是一个日期。

在该应用中,使用这个类的各种实例。可以通过各种因素更新每个单个对象的timeoutDate字段。我需要知道实际日期何时到达timeutDate。

在一个非常简单的(并没有优化)的方式下,我会创建一个@Scheduled任务,但延迟太短,我不喜欢它,我该怎么办?

回答

1

在非常简单的(而不是优化)我会创建了一个 @Scheduled任务的方式,但延迟将是太短了,我不喜欢它, 我该怎么办?

为什么太短? 你可以使用你想要的延迟。

@Scheduled(fixedDelay=50000) // 50 secs 
@Scheduled(fixedDelay=1000) // 1 secs 
0

您可以使用石英Jesque(Redis的)。无论需要执行什么任务,您都可以在该时间安排该任务。

如果这个时间值可以随时更新,你可以取消(取消调度)以前调度的任务(任务使用标识符或键),并与更新的时间重新安排它。

0

看看在Spring中不同的任务调度的API文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

你有很多选择。我认为你可能有的“未优化”的想法是安排一个重复的任务,它搜索你的bean来找到过期的。对于大量的豆来说,这确实是低效的。

您可以简单地为每个bean创建一个计划任务,该bean具有timeoutDate,与该bean同时创建,并且更新其timeoutdate(Spring AOP可以帮助实现)。

或者你可以保持Bean的列表,通过超时日期排序。安排最早到期时间的任务。它收获了这个bean以及其他任何时间已过的人,然后在下一次到期时安排一项新任务。

如果你这样做,你需要确保: - 它处理添加到列表中的新对象(也许早于当前计划扑杀的到期日) - 它处理其中一个对象被删除的情况下除了超时以外的其他原因

(除非这些事情都不会发生 - 在这种情况下不用担心!)