在Spring中,可以通過使用分布式鎖來防止定時任務的重復調用。
以下是一種常見的實現方式:
首先,引入一個緩存(如Redis)用于存儲定時任務的執行狀態。
在定時任務的執行方法中,首先獲取分布式鎖,如果獲取成功,則繼續執行任務;如果獲取失敗,則說明任務正在執行中,直接返回。
在任務執行完成后,釋放分布式鎖,并將任務的執行狀態更新到緩存中,表示任務已執行完成。
在下一次定時任務觸發時,先從緩存中查詢任務的執行狀態,如果狀態為已執行完成,則繼續執行任務;如果狀態為正在執行中,則直接返回。
這樣,即使定時任務觸發的頻率很高,也可以保證同一時間只有一個任務在執行,從而避免了重復調用的問題。