web-dev-qa-db-ja.com

春のスケジューリング:@Scheduled vs Quartz

スケジューリングに関して Spring 3.0 doc sを読んでいます。私はQuartzのSpringのJobDetailBeanに傾いています。しかし、@ Scheduledアノテーションが私の目を引きました。これは、Spring Frameworkを使用してタスクをスケジュールする別の方法のようです。ドキュメントに基づいて、Springは3つのスケジューリング方法を提供します。

  1. @予定
  2. クォーツ経由
  3. JDKタイマー経由

JDKタイマーには興味がありません。 Quartzではなく@Scheduledを選択する必要があるのはなぜですか? (私がQuartzに言及するとき、私はQuartzにSpringのBeanラッパーを使用することを意味します)。

私のユースケースが非常に複雑で、指定した間隔でデータをインポートおよびエクスポートするためにサードパーティのWebサービスと通信しているとします。

43
chris

Quartzは、Springの組み込みスケジューラよりもはるかに複雑で、永続的、トランザクション、分散ジョブのサポートを含みます。ただし、SpringのAPIサポートがあったとしても、それは少し豚のようなものです。

X秒ごとにBeanでメソッドを実行するか、cronスケジュールで実行するだけの場合は、@Scheduled(またはSpringのさまざまなオプション <task>構成スキーマ )でおそらく十分です

34
skaffman

Springアプリケーションでのスケジューリング実装としての@ScheduledQuartzの使用に関する自分の経験を述べなければなりません。

ジョブのスケジューリングには次の要件がありました。

  • エンドユーザーは、自分のタスクを保存およびスケジュール(実行時間を定義)できる必要があります
  • サーバーのダウンタイム中にスケジュールされたジョブがジョブキューから除外されないようにする必要があります

したがって、データベースでのジョブの永続性をサポートするために、Quartz実装(バージョン2.2.3)を試して使用する必要があります。基本的な結論は次のとおりです。

  • Spring 4 MVCアプリケーションとの統合は、quartz.propertiesファイルを使用してまったく難しくありません。
  • メインデータベースからのジョブを保存するための2番目のデータベースを選択する機能がありました。
  • サーバーのダウンタイム中にスケジュールされたジョブは、サーバーが起動する限り実行を開始します。
  • おまけとして、カスタムJobListenerおよびTriggerListenerを使用して、ユーザー定義のスケジュールされたジョブに関するいくつかの有用な(そしてよりユーザー指向の)情報をメインデータベースに維持することができました。
  • Quartzは、より複雑なスケジューリング要件を持つアプリケーションで非常に役立つライブラリです。
10
lzagkaretos

Quartz Documentation によると

@Schedulerにはない複雑な機能を使用できます。例えば:

  1. quartzでは、scheduler.standby();を使用してスケジューラをスタンバイモードにし、scheduler.start();を使用して再スケジュールできます。
  2. ジョブの実行前またはその後にscheduler.shutdown(true);およびscheduler.shutdown(false);を使用してスケジューラをシャットダウンする
  3. 後で使用するためにジョブを保存し、ジョブが必要になったときにトリガーできます。

JobDetail job1 =newJob(MyJobClass.class). withIdentity("job1","group1"). storeDurably(). build();

  1. 新しいジョブをスケジューラに追加し、既存のジョブを指定された名前とグループ(存在する場合)に「置き換える」ように指示します。

JobDetail job1 = newJob(MyJobClass.class). withIdentity("job1", "group1"). build();

1
Saman Salehi

Springでは、FixedRate、FixedDelay、cronを使用してタスクをスケジュールできます。しかし、スケジュールされたジョブのほとんどは、実行時間の動的処理を必要とします。したがって、このシナリオでは、Quartzを使用することをお勧めします。Quartzは、スケジュールされたジョブをDBJobstoreとRAMJobstoreに保存するオプションを提供するためです。

0
Cyril Sojan