鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ springboot Scheduled相關(guān)問題~

springboot Scheduled相關(guān)問題~

現(xiàn)在有個定時任務(wù)在項目里面,是每天凌晨執(zhí)行一次,但是有一天數(shù)據(jù)量特別大,任務(wù)跑了一天還沒跑完,一直執(zhí)行到了第二天,然后這個任務(wù)又開始執(zhí)行了。所以造成了數(shù)據(jù)的重復(fù)

相關(guān)代碼

    /***
     * 每天凌晨一點sqlserver數(shù)據(jù)庫抓取數(shù)據(jù)
     * @throws Exception 系統(tǒng)異常
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void switchDate(){}

這么寫的,現(xiàn)在我想讓任務(wù)執(zhí)行的時候看上一次同一任務(wù)執(zhí)行完沒,如果沒有執(zhí)行完就推遲任務(wù)執(zhí)行時間。我查過資料就是類似 Quartzconcurrent 屬性,是這么說的:

其中 concurrent 屬性標(biāo)識的解釋為:對于相同的 JobDetail ,當(dāng)指定多個 Trigger 時, 很可能第一個job 完成之前,第二個 job 就開始了。指定 concurrent 設(shè)為 false,多個 job 不會并發(fā)運行,第二個job 將不會在第一個 job 完成之前開始。

那么此處的第二個 job 到底是被推遲執(zhí)行了,還是被取消了呢? 今天帶著這個疑問做了一個小實驗,具體做法如下:將任務(wù)的 Trigger 設(shè)置為每 10 秒鐘執(zhí)行一次,然后在執(zhí)行的任務(wù)體內(nèi)讓 Thread 暫停 15 秒鐘,這樣不同的 job 之間肯定會有時間上的重疊。當(dāng)啟動程序之后,發(fā)現(xiàn)前一個 job 執(zhí)行結(jié)束的時刻的秒數(shù)為15,而且第二個本來在 10s 就執(zhí)行的 job 馬上就啟動了。

由此可見,concurrent屬性實際是將job推遲執(zhí)行了。

各位有誰知道嗎?小弟表述不清的地方...對不住了( ?? ω ?? )y

回答
編輯回答
忠妾

spring默認(rèn)使用的是單線程executor,應(yīng)該不會有第一個沒執(zhí)行完就執(zhí)行第二個這種情況發(fā)生?;蛘吣憧梢哉蟩uartz: https://docs.spring.io/spring...

2018年1月10日 00:41