1. 程式人生 > >關於Spring容器中定時器到時執行會出現兩個執行緒同時執行的問題

關於Spring容器中定時器到時執行會出現兩個執行緒同時執行的問題

最近公司有一個小需求,是需要定時去從某一個視訊供應商下載視訊檔案,問題很簡單,直接使用quartz,編寫相應的定時器程式碼,同時配置相應的定時器時間,但是在定時執行之後會出現兩個執行緒同時執行定時任務的問題,並且這兩個執行緒併發執行,從而一直影響到視訊檔案下載。

兩個執行緒同時執行
百思之後發現,這個問題是因為quartz的配置檔案import到了Spring容器的配置檔案裡面了,然後Spring容器的xml配置檔案又配置到了web.xml檔案中,

    1,當web服務啟動的時候,會讀取web.xml檔案中的Spring容器的配置檔案,這個時候定時器執行一次,
    2,Spring容器本身同樣會讀取applicationContext.xml檔案,這個時候定時器又執行了一次

解決的方式很簡單

既然將quartz的配置檔案直接import到Spring容器的配置檔案applicationContext.xml會出現這樣的問題,那就把quartz的配置檔案直接配置到web.xml檔案中去,具體的操作如下:

將quartz的配置資訊直接單獨寫一個xml檔案,然後在web.xml容器的<context-param>中再加一個對應quartz配置資訊的<param-values>

這裡寫圖片描述

重新執行定時任務之後就不會出現上面的情況