2010-10-29 31 views
3

如果我有一個Quartz調度與一羣觸發器的運行,我想清除所有的觸發器,如何最好做到這一點?如何清除觸發器在Quartz調度

我認爲遍歷組和名稱,呼籲取消調度,因爲我去,但是當有落實,數千人的觸發器(約2秒取消預定10個觸發器),這似乎很慢。

一個基本的測試案例(計劃1000個觸發器,刪除的100批次)示出了指數複雜w.r.t.計劃觸發對取消調度操作數:

Deleted 100 triggers in 3594ms,35.94 triggers/ms 
Deleted 100 triggers in 2734ms,13.67 triggers/ms 
Deleted 100 triggers in 2453ms,8.176666666666666 triggers/ms 
Deleted 100 triggers in 1985ms,4.9625 triggers/ms 
Deleted 100 triggers in 1547ms,3.094 triggers/ms 
Deleted 100 triggers in 1281ms,2.135 triggers/ms 
Deleted 100 triggers in 1047ms,1.4957142857142858 triggers/ms 
Deleted 100 triggers in 765ms,0.95625 triggers/ms 
Deleted 100 triggers in 485ms,0.5388888888888889 triggers/ms 
Deleted 100 triggers in 156ms,0.156 triggers/ms 

我無法找到任何一種大宗方法來清除的東西出來。

我終於考慮停止調度並切斷它寬鬆的垃圾收集,但我不知道是否有什麼我可能需要整理,以確保它不被任何引用。

任何人都有看到最好的方法在這裏?

回答

2

你將有多少觸發器和工作?

當觸發器被存儲在存儲器中的地圖狀結構,對於大量的它們中的有重存儲器要求和多個觸發器,越慢的操作是。

你考慮過數據庫存儲嗎?您可以從SQL能力中獲利以操作一組數據並刪除整組觸發器,或者使用單個命令刪除所有與觸發器模式匹配的觸發器。

1

我認爲最好的辦法是隻使用調度的shutdown方法。如果您希望在計劃程序關閉之前完成所有當前正在執行的作業,則可以致電scheduler.shutdown(true)。根據Quartz API,調用關機清理與調度程序相關聯的所有資源。

相關問題