2016-10-27 34 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以及其他任何時間已過的人,然後在下一次到期時安排一項新任務。

如果你這樣做,你需要確保: - 它處理添加到列表中的新對象(也許早於當前計劃撲殺的到期日) - 它處理其中一個對象被刪除的情況下除了超時以外的其他原因

(除非這些事情都不會發生 - 在這種情況下不用擔心!)