我不知道这是否是一个真正的问题...但我想知道你们中的一些人会如何处理这个......
我有一个Spring Boot应用程序。
然后我有一个Interruttore.class,其中包含这个字段timeoutDate
,这是一个日期。
在应用程序中,使用了此类的各种实例。可以通过各种因素为每个单个对象更新timeoutDate字段。我需要知道实际日期何时到达timeutDate。
以一种非常简单(而非优化)的方式,我会创建一个@Scheduled
任务,但延迟时间太短而且我不喜欢它,我该怎么办?
答案 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和其他任何时间过去的人,然后在下一次到期时安排新任务。
如果你这样做,你需要确保: - 它处理添加到列表中的新对象(可能具有比当前计划的剔除更早的有效期) - 它处理因超时而非删除对象的情况
(除非这些事情都不会发生 - 在这种情况下不要担心!)