1

Java で非同期ジョブ スケジューリングを実装するためのメカニズムが必要で、Quartz Schedulerを見ていましたが、必要な機能が提供されていないようです。

より具体的には、異なるノード間で実行される私のアプリケーションには、ユーザーがいくつかの異なるジョブをスケジュールする Web ベースの UI があります。ジョブが完了すると (将来的に)、ユーザーにステータスが通知されるように、UI に報告する必要があります。それまでは、スケジュールされたジョブを編集またはキャンセルするオプションがユーザーに与えられます。

実装方法は、ノードの 1 つでバックグラウンドで常に実行されているスケジューラ スレッドを持ち、ジョブ実行の JobDetail 定義を収集することです。

いずれにせよ、2 つの質問があります (単一ノードまたは複数ノードのシナリオに適用されます)。

  1. Quartz は、すでにスケジュールされているジョブの変更またはキャンセルを許可しますか?
  2. ジョブの実行結果が UI に報告されるように「コールバック」メカニズムを実装するにはどうすればよいですか?

コード例またはポインターは大歓迎です。

4

2 に答える 2

4
  1. Quartzは、すでにスケジュールされているジョブの変更またはキャンセルを許可しますか?

ジョブを「スケジュール解除」できます。

scheduler.unscheduleJob(triggerKey("trigger1", "group1"));

または、ジョブを削除します。

scheduler.deleteJob(jobKey("job1", "group1"));

ドキュメントで説明されているように:

http://quartz-scheduler.org/documentation/quartz-2.x/cookbook/UnscheduleJob

2つの主な違いは、ジョブのスケジュールを解除すると特定のトリガーが削除されるのに対し、ジョブを削除すると特定のジョブのすべてのトリガーが削除されることに注意してください。

  1. ジョブの実行結果がUIに報告されるように、「コールバック」メカニズムをどのように実装できますか?

通常、Webの世界では、変更についてWebサーバーをポーリングします。Webフレームワークによっては、これを簡単にするコンポーネント(Push、Pull、Poll?)が利用できる場合があります。また、あなたがする必要があるのは、あなたの仕事についてのいくつかの状態をサーバーに保存することです。ジョブが終了したら、データベースまたは場合によってはメモリ内の値を更新できます。これは、次に、ポーリングによって取得され、ユーザーに表示されます。

于 2012-05-07T23:50:47.393 に答える
1

@johncarl の回答を Quarz で完了するには、これも必要です

  1. SchedulerListener インターフェースを実装した実行前後のイベントを処理する
  2. ジョブをグループ化
  3. Enterprise Edition のサポート
  4. ここで最も重要なcron式はドキュメントです
于 2012-05-08T02:32:28.103 に答える