[英]Spring Scheduling: @Scheduled vs Quartz
我正在閱讀關於調度的Spring 3.0文檔 。 我傾向於Spring的JobDetailBean for Quartz。 但是@Scheduled注釋引起了我的注意。 看來這是使用Spring Framework調度任務的另一種方式。 基於文檔,Spring提供了三種調度方式:
我對JDK Timer沒興趣。 我為什么要選擇@Scheduled而不是Quartz? (當我提到Quartz時,我的意思是使用Spring的bean包裝器進行Quartz)。
假設我的用例非常復雜,我將與第三方Web服務進行通信,以便按指定的時間間隔導入和導出數據。
Quartz比Spring的內置調度程序復雜一個數量級,包括對持久,事務和分布式作業的支持。 盡管如此,即使使用Spring的API支持,它也有點像豬。
如果您需要的是每隔X秒或在cron調度上對bean執行方法,那么@Scheduled
(或Spring的<task>
config schema中的各種選項)可能就足夠了
我必須說明我自己在使用@Scheduled
和Quartz
作為Spring應用程序中的調度實現方面的經驗。
調度作業具有以下要求:
因此,我們必須嘗試使用Quartz實現(版本2.2.3)以支持數據庫中作業的持久性。 一些基本結論如下:
JobListener
和TriggerListener
在主數據庫中維護一些有用的(以及更多面向用戶的)有關用戶定義的預定作業的信息。 根據Quartz文檔
我們可以使用@Scheduler中不存在的更復雜的功能。 例如:
scheduler.standby();
將調度程序置於待機模式scheduler.standby();
並使用scheduler.start();
重新安排它scheduler.start();
。 scheduler.shutdown(true);
關閉調度scheduler.shutdown(true);
和scheduler.shutdown(false);
JobDetail job1 =newJob(MyJobClass.class). withIdentity("job1","group1"). storeDurably(). build();
JobDetail job1 = newJob(MyJobClass.class). withIdentity("job1", "group1"). build();
在Spring中,您可以使用FixedRate,FixedDelay和cron來安排任務。 但是大多數預定作業需要動態處理執行時間。 所以在這種情況下最好使用Quartz,因為它提供了在DBJobstore和RAMJobstore中存儲預定作業的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.