您好,登錄后才能下訂單哦!
這篇文章給大家介紹Java如何實現訂單未支付超時自動取消功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
在電商上購買商品后,如果在下單而又沒有支付的情況下,一般提示30分鐘完成支付,否則訂單自動。比如在京東下單為完成支付:
超過24小時,就會自動取消訂單,下面使用 Java 定時器實現超時取消訂單功能。
Timer 定時器
Timer 是一個調度任務的執行的工具,任務可以一次性定時執行或者定時重復執行,系統會啟動一個線程來執行所有的定時任務。
TimerTask 定時任務
TimerTask 是一個抽象類,它實現了 Runnable,實現 Runnable 也就是創建了多線程任務。
TimerTask 是抽象類,抽象是為了代碼復用,要創建一個類繼承 TimerTask:
public class CancelOrderTimeTask extends TimerTask { private Long id; public CancelOrderTimeTask(long id) { this.id = id; } @Override public void run() { // 執行取消訂單 cancelOrder(id); System.out.println(getCurrentTime() + " 時間取消訂單,訂單id:" + id); } private String getCurrentTime() { SimpleDateFormat sdf = new SimpleDateFormat(); sdf.applyPattern("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return sdf.format(date); } }
在 run
方法執行訂單取消任務。
因為這個方法不是創建 bean,所以在調用的 dao 或者其他的 bean 時,要使用 ApplicationContext
獲取 bean。
新建 Timer,使用 schedule 方法調用,方法有兩個參數,第一個是任務的實例,另一個是延遲多久后調用任務,單位是毫秒。代碼如下:
@RestController public class TimerController { @GetMapping("/timer") public String timer(long id) { Timer timer = new Timer(); CancelOrderTimeTask timeTask = new CancelOrderTimeTask(id); System.out.println("當前時間是" + getCurrentTime()); //10秒后執行任務 timer.schedule(timeTask,10 * 1000); return "ok"; } private String getCurrentTime() { SimpleDateFormat sdf = new SimpleDateFormat(); sdf.applyPattern("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return sdf.format(date); } }
調用方法后,控制臺輸出如下內容,說明定時調用成功。
當前時間是2022-01-24 00:05:09
2022-01-24 00:05:19 時間取消訂單,訂單id:3
首先創建定時任務,繼承 TimerTask,在 run 方法里面寫業務邏輯。
使用 Timer 調用 schedule 方法, schedule 方法寫入 TimerTask 實例以及延遲時間。
關于Java如何實現訂單未支付超時自動取消功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。