スケジューリングに関して Spring 3.0 doc sを読んでいます。私はQuartzのSpringのJobDetailBeanに傾いています。しかし、@ Scheduledアノテーションが私の目を引きました。これは、Spring Frameworkを使用してタスクをスケジュールする別の方法のようです。ドキュメントに基づいて、Springは3つのスケジューリング方法を提供します。
JDKタイマーには興味がありません。 Quartzではなく@Scheduledを選択する必要があるのはなぜですか? (私がQuartzに言及するとき、私はQuartzにSpringのBeanラッパーを使用することを意味します)。
私のユースケースが非常に複雑で、指定した間隔でデータをインポートおよびエクスポートするためにサードパーティのWebサービスと通信しているとします。
Quartzは、Springの組み込みスケジューラよりもはるかに複雑で、永続的、トランザクション、分散ジョブのサポートを含みます。ただし、SpringのAPIサポートがあったとしても、それは少し豚のようなものです。
X秒ごとにBeanでメソッドを実行するか、cronスケジュールで実行するだけの場合は、@Scheduled
(またはSpringのさまざまなオプション <task>
構成スキーマ )でおそらく十分です
Springアプリケーションでのスケジューリング実装としての@Scheduled
とQuartz
の使用に関する自分の経験を述べなければなりません。
ジョブのスケジューリングには次の要件がありました。
したがって、データベースでのジョブの永続性をサポートするために、Quartz実装(バージョン2.2.3)を試して使用する必要があります。基本的な結論は次のとおりです。
JobListener
およびTriggerListener
を使用して、ユーザー定義のスケジュールされたジョブに関するいくつかの有用な(そしてよりユーザー指向の)情報をメインデータベースに維持することができました。Quartz Documentation によると
@Schedulerにはない複雑な機能を使用できます。例えば:
scheduler.standby();
を使用してスケジューラをスタンバイモードにし、scheduler.start();
を使用して再スケジュールできます。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を使用することをお勧めします。Quartzは、スケジュールされたジョブをDBJobstoreとRAMJobstoreに保存するオプションを提供するためです。