很多帖子說我們可以在ServletContextListener
中使用ScheduledExecutorService
。但我想在某種情況下啓動計時器,然後在另一種情況下停止計時。例如,從客戶端A在請求A中啓動一個定時器,在客戶端A或客戶端B的請求B中停止它。我應該將定時器存儲在會話中嗎?如何動態地啓動和結束tomcat servlet請求中的計時器或計劃作業?
真正的問題是這樣的:我從網絡請求創建一個訂單,我想取消訂單,如果它沒有在24小時後付款。
爲了把事情說清楚,我想這樣的情況:我從一個Web請求創建一個對象,我想刪除的對象,如果它沒有被10秒鐘後處理。在這麼短的時間內,每5到8秒鐘進行一次計劃工作是否很好?我想在10秒或甚至1秒後正好完成這項工作。
這裏這樣的回答解釋瞭如何從一個網絡環境中實例化一個執行服務:http://stackoverflow.com/a/9186070/2892670 – tchambers
感謝。但我想要一些不同的東西。我編輯我的問題來說清楚。 –
我不知道,這是一個很好的設計,但你可以使用[PassiveExpiringMap(https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/map/ PassiveExpiringMap.html)來存儲對象 - 大概您需要某種ID或密鑰來查找它們。 Guava在[CacheBuilder](https://google.github.io/guava/releases/17.0/api/docs/com/google/common/cache/CacheBuilder.html)中有類似的概念,您可以在其中使用'.expireAfterWrite (10,TimeUnit.SECONDS)'方法。 – tchambers