現在有個定時任務在項目里面,是每天凌晨執行一次,但是有一天數據量特別大,任務跑了一天還沒跑完,一直執行到了第二天,然后這個任務又開始執行了。所以造成了數據的重復相關代碼 /***
* 每天凌晨一點sqlserver數據庫抓取數據
* @throws Exception 系統異常
*/
@Scheduled(cron = "0 0 1 * * ?") public void switchDate(){}這么寫的,現在我想讓任務執行的時候看上一次同一任務執行完沒,如果沒有執行完就推遲任務執行時間。我查過資料就是類似 Quartz 的 concurrent 屬性,是這么說的:其中 concurrent 屬性標識的解釋為:對于相同的 JobDetail ,當指定多個 Trigger 時, 很可能第一個job 完成之前,第二個 job 就開始了。指定 concurrent 設為 false,多個 job 不會并發運行,第二個job 將不會在第一個 job 完成之前開始。那么此處的第二個 job 到底是被推遲執行了,還是被取消了呢? 今天帶著這個疑問做了一個小實驗,具體做法如下:將任務的 Trigger 設置為每 10 秒鐘執行一次,然后在執行的任務體內讓 Thread 暫停 15 秒鐘,這樣不同的 job 之間肯定會有時間上的重疊。當啟動程序之后,發現前一個 job 執行結束的時刻的秒數為15,而且第二個本來在 10s 就執行的 job 馬上就啟動了。由此可見,concurrent屬性實際是將job推遲執行了。各位有誰知道嗎?小弟表述不清的地方...對不住了( ?? ω ?? )y
springboot Scheduled相關問題~
慕萊塢森
2018-08-02 18:33:50