當訂單定時取消需要修改數據庫訂單狀態,但是怎么確定訂單什么時候應該改變狀態,解決方案有下面兩種:
第一種,寫個定時器去每分鍾掃描數據庫,這樣更新及時,但是如果數據庫數據量大的話,會對數據庫造成很大的壓力。
第二種,創建訂單的時候再訂單表里面創建一條記錄,然后把這條記錄保存到DelayQueue隊列里面,並且用一個子線程不斷地輪訓這個出隊的訂單。然后進行訂單狀態修改的狀態。
下面是這個方式的實現:
1)保存訂單信息的Bean必須實現Delay接口。Delay里面有兩個重要的方法。一個是compareTo,該方法是用來比較隊列里面的訂單的順序。另外一個是getDelay,用來判斷最前面訂單出隊的時間。
2)創建線程類。去調用對應的Service方法來操作數據庫。
3.系統剛一啟動就要把數據庫里面未付款的訂單加載到Queue里面,並且調用線程池生成子線程,這樣可以確保子線程出異常后,不會影響到后續的訂單處理。啟動子線程不斷監控要出隊的訂單。
4.當客戶取消訂單的時候,需要程序從Queue里面刪除訂單信息。