前面咱們提到 Quartz 中四種類型的 Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger, 和 NthIncludedDayTrigger。crontab
SimpleTrigger 通常用於實現每隔必定時間執行任務,以及重複多少次,如每 2 小時執行一次,重複執行 5 次。SimpleTrigger 內部實現機制是經過計算間隔時間來計算下次的執行時間,這就致使其不適合調度定時的任務。例如咱們想天天的 1:00AM 執行任務,若是使用 SimpleTrigger 的話間隔時間就是一天。注意這裏就會有一個問題,即當有 misfired 的任務而且恢復執行時,該執行時間是隨機的(取決於什麼時候執行 misfired 的任務,例如某天的 3:00PM)。這會致使以後天天的執行時間都會變成 3:00PM,而不是咱們原來指望的 1:00AM。im
CronTirgger 相似於 LINUX 上的任務調度命令 crontab,即利用一個包含 7 個字段的表達式來表示時間調度方式。例如,"0 15 10 * * ? *" 表示天天的 10:15AM 執行任務。對於涉及到星期和月份的調度,CronTirgger 是最適合的,甚至某些狀況下是惟一選擇。例如,"0 10 14 ? 3 WED" 表示三月份的每一個星期三的下午 14:10PM 執行任務。讀者能夠在具體用到該 trigger 時再詳細瞭解每一個字段的含義。項目
DateIntervalTrigger 是 Quartz 1.7 以後的版本加入的,其最適合調度相似每 N(1, 2, 3...)小時,每 N 天,每 N 周等的任務。雖然 SimpleTrigger 也能實現相似的任務,可是 DateIntervalTrigger 不會受到咱們上面說到的 misfired 任務的影響。另外,DateIntervalTrigger 也不會受到 DST(Daylight Saving Time, 即中國的夏令時)調整的影響。筆者就曾經由於該緣由將項目中的 SimpleTrigger 改成了 DateIntervalTrigger,由於若是使用 SimpleTrigger,原本設定的調度時間就會因爲 DST 的調整而提早或延遲一個小時,而 DateIntervalTrigger 不會受此影響。tab
NthIncludedDayTrigger 的用途比較簡單明確,即用於每隔一個週期的第幾天調度任務,例如,每月的第 3 天執行指定的任務。時間