2017-03-04 69 views
0

假設我有一個客戶的賬戶被設置爲在給定的日期到期。我有一個任務編碼,將停止服務,但我不知道如何啓動確切在指定日期的任務。預定在Java中的未來任務

我正在尋找一種方式來安排一次性未來的任務有如下要求:

  • 任務必須一旦拉開序幕,正是在指定的時間。
  • 調度機制應該是持久的。如果服務器停機,任務列表應該恢復並啓動停機期間的任何事件。

由於我使用Java,Quartz看起來像是一個合理的選擇,但我只用它來進行基於cron的調度。我不確定它是否可以用於這樣的事情或最佳實踐 - 尤其是持久性部分。

春天在這方面有什麼嗎?

+0

http://stackoverflow.com/a/34324083/5626568 –

+0

https://spring.io/guides/gs/scheduling-tasks/ –

+0

我認爲Quartz爲您提供瞭如此靈活的解決方案。 石英文檔:http://www.quartz-scheduler.org/documentation 簡單示例(http://www.mkyong.com/tutorials/quartz-scheduler-tutorial/) – M2E67

回答

0

Java定時器類與定製的DeactivateCustomerTask相結合,除了通過電源故障問題的持久性外,對於其他所有方面都是足夠的。

對於持久性,您可以保留一個已序列化到HDD的List,然後在加電時再次讀回。但是,您必須已將客戶數據保存到磁盤,因此通過掃描該數據庫從頭開始重新創建清單更有意義。最後,服務器脫機時,帳戶可能已過期,您需要在啓動時專門處理該情況。

您可能已經意識到這一點,但DeactivateCustomerTask需要確保客戶在創建之後未更新;並且更新方法需要確保DeactivateCustomerTask不同時執行。