2010-12-08 23 views
36

我在閱讀有關日程安排的Spring 3.0 doc。我傾向於Spring的JobDetailBean Quartz。但是,註釋引起了我的注意。看來這是使用Spring框架調度任務的另一種方式。根據該文件,Spring提供調度的三路:春季日程安排:@Scheduled與Quartz

  1. @Scheduled
  2. 通過石英
  3. 通過JDK定時器

我在JDK定時器沒有興趣。爲什麼我應該選擇@Scheduled over Quartz? (當我提到Quartz時,我的意思是使用Spring的用於Quartz的bean包裝器)。

假設我的用例足夠複雜,我將與第三方Web服務通信以按指定的時間間隔導入和導出數據。

回答

28

石英比Spring內置的調度器複雜得多,包括支持持久性,事務性和分佈式作業。儘管如此,即使Spring支持API,這也有點兒麻煩。

如果你需要的就是對一個bean的執行方法每隔X秒,或在cron的日程安排,然後@Scheduled(或Spring的<task> config schema的各種選項)大概夠

+7

「這是[石英]有點豬」 - 這是2年後,我正在做與@chris相同的比較。 Quartz仍然難以通過Spring使用? – Edward 2013-02-21 16:13:46

1

我必須聲明我自己關於在Spring應用程序中使用@ScheduledQuartz作爲調度實現的經驗。

調度工作有以下要求:

  • 最終用戶應該能夠保存和時間表(定義執行時間)自己的任務
  • 服務器停機期間
  • 計劃作業不應該得到從工作隊列中省略

因此,我們必須嘗試使用​​Quartz實現(版本2.2.3)以支持數據庫中作業的持久性。一些基本結論如下:

  • 與Spring 4 MVC應用程序的集成使用quartz.properties文件並不困難。
  • 我們有能力選擇第二個數據庫來存儲來自主數據庫的作業。
  • 服務器停機時間計劃的作業在服務器啓動時開始運行。
  • 作爲獎勵,我們設法在主數據庫中使用自定義JobListenerTriggerListener來保留有關用戶定義的計劃作業的一些有用(和更多用戶導向)信息。
  • 在具有更復雜調度要求的應用程序中,Quartz是一個非常有用的庫。