2007年5月25日 星期五

Quartz設定後無預期並行排程解疑

在Spring中我們可以整合Quartz進行定時排程的程式呼叫!
其設定如下:



上述的設定,定義了在每天凌晨1點進行排程執行SpringContainer中的ldapManager物件中的batchLdap的函式。看來似乎沒問題,但在實際執行中會發現,在排程時間到了之後會持續不斷執行batchLdap函式,直到凌晨2點為止。並且若使用Log4j設定%t顯示log中執行緒資訊的話,會發現,Quartz不但連續執行指定的函式,並且並行多條執行緒。若不希望Quartz同時間啟動多條執行緒進行排程函式的話。可加入如下:



而會一直不斷執行的問題還沒解決,其實這並不是問題,只是設定錯誤而已,本例若希望在凌晨1點只執行一次排程的話。只需進行設定的修改,如下:




也就是說,指定在凌晨1點零分零秒時執行,之前[*]的定義是代表會持續任意時間,所以才會發生會連續不斷的執行排程函式。這點是所有使用Quartz的開發人員該注意的。

沒有留言: