Spring Boot - 检查对象是否达到目标日期

时间:2016-10-27 19:30:57

标签: java spring

我不知道这是否是一个真正的问题...但我想知道你们中的一些人会如何处理这个......

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

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

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

3 个答案:

答案 0 :(得分:1)

  

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

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

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

答案 1 :(得分:0)

您可以使用 Quartz Jesque(redis)。无论需要执行什么任务,您都可以在那时安排该任务。

如果此时间值可以随时更新,您可以取消(取消预定)以前安排的任务(使用任务标识符或密钥),并使用更新的时间重新安排它。

答案 2 :(得分:0)

查看Spring的各种任务调度API的文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

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

您可以使用timeoutDate 为每个bean创建一个计划任务,与该bean同时创建,以及更新其timeoutdate时(Spring AOP可以帮助解决此问题)。

或者,您可以保留一个bean列表,按超时日期排序。在最早到期时安排任务。它收获了bean和其他任何时间过去的人,然后在下一次到期时安排新任务。

如果你这样做,你需要确保:   - 它处理添加到列表中的新对象(可能具有比当前计划的剔除更早的有效期)   - 它处理因超时而非删除对象的情况

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