天天看點

Quartz教程五:SimpleTrigger

simpletrigger可以滿足的排程需求是:在具體的時間點執行一次,或者在具體的時間點執行,并且以指定的間隔重複執行若幹次。比如,你有一個trigger,你可以設定它在2015年1月13日的上午11:23:54準時觸發,或者在這個時間點觸發,并且每隔2秒觸發一次,一共重複5次。

根據描述,你可能已經發現了,simpletrigger的屬性包括:開始時間、結束時間、重複次數以及重複的間隔。這些屬性的含義與你所期望的是一緻的,隻是關于結束時間有一些地方需要注意。

重複次數,可以是0、正整數,以及常量simpletrigger.repeat_indefinitely。重複的間隔,必須是0,或者long型的正數,表示毫秒。注意,如果重複間隔為0,trigger将會以重複次數并發執行(或者以scheduler可以處理的近似并發數)。

如果你還不熟悉datebuilder,了解後你會發現使用它可以非常友善地構造基于開始時間(或終止時間)的排程政策。

endtime屬性的值會覆寫設定重複次數的屬性值;比如,你可以建立一個trigger,在終止時間之前每隔10秒執行一次,你不需要去計算在開始時間和終止時間之間的重複次數,隻需要設定終止時間并将重複次數設定為repeat_indefinitely(當然,你也可以将重複次數設定為一個很大的值,并保證該值比trigger在終止時間之前實際觸發的次數要大即可)。

simpletrigger執行個體通過triggerbuilder設定主要的屬性,通過simpleschedulebuilder設定與simpletrigger相關的屬性。要使用這些builder的靜态方法,需要靜态導入:

下面的例子,是基于簡單排程(simple schedule)建立的trigger。建議都看一下,因為每個例子都包含一個不同的實作點:

指定時間開始觸發,不重複:

指定時間觸發,每隔10秒執行一次,重複10次:

5分鐘以後開始觸發,僅執行一次:

立即觸發,每個5分鐘執行一次,直到22:00:

在下一小時整點觸發,每個2小時執行一次,一直重複:

請查閱triggerbuilder和simpleschedulebuilder提供的方法,以便對上述示例中未提到的選項有所了解。

triggerbuilder(以及quartz的其它builder)會為那些沒有被顯式設定的屬性選擇合理的預設值。比如:如果你沒有調用withidentity(..)方法,triggerbuilder會為trigger生成一個随機的名稱;如果沒有調用startat(..)方法,則預設使用目前時間,即trigger立即生效。

simpletrigger的misfire政策常量:

回顧一下,所有的trigger都有一個trigger.misfire_instruction_smart_policy政策可以使用,該政策也是所有trigger的預設政策。

如果使用smart policy,simpletrigger會根據執行個體的配置及狀态,在所有misfire政策中動态選擇一種misfire政策。simpletrigger.updateaftermisfire()的javadoc中解釋了該動态行為的具體細節。

在使用simpletrigger構造trigger時,misfire政策作為基本排程(simple schedule)的一部分進行配置(通過simpleschedulerbuilder設定):

繼續閱讀