14

現在実行中の Quartz ジョブを強制終了することはできませんが、後続の操作をさらに進める必要があるかどうかを中断して、必要に応じてブール値のチェックを行うことができます。

を実装してInterruptableJobを呼び出してscheduler.interruptジョブを中断した場合でも、現在実行されているジョブはサーバーで引き続き実行されます。

元:

  1. 名前付き SQL クエリが Hibernate を介してジョブによってトリガーされましたが、これには長い時間がかかります
  2. サード パーティのサーバーに呼び出しが行われ、サード パーティのサーバーの応答に時間がかかる場合

http://neopatel.blogspot.in/2011/05/quartz-stop-job.html http://forums.terracotta.org/forums/posts/list/3191.page

誰かが私の理解を修正し、「現在」実行中の Job を強制終了または停止する方法を説明してもらえますか?

4

3 に答える 3

4

あなたが言ったように、QuartzでもJavaでもジョブを「残酷に」中断する方法はありません。

ジョブのロジックを別の Thread にカプセル化し、ExecutorService で実行できます。

この例を見てください: https://stackoverflow.com/a/2275596/1517816

QuartzJob が Test クラスであると仮定し、ビジネス ロジックを Task クラスに移動します。

それが役に立てば幸い

于 2012-10-26T07:31:09.323 に答える
2

誰もこれについて言及しなかった理由がわかりません。または、質問が行われた時点でこれが入手できなかったのかもしれません。

Scheduler インスタンスには shutdown というメソッドがあります。

 SchedulerFactory factory = new StdSchedulerFactor();
 Scheduler scheduler = factory.getScheduler();

上記は、次のようなジョブを開始するために使用されます

  scheduler.start();

ジョブの実行をいつ停止するかを知るために、フラグなどを使用します。次に使用します

 scheduler.shutdown();

私の要件をどのように実装したか:

 if(flag==true)
{
    scheduler.start();
    scheduler.scheduleJob(jobDetail, simpleTrigger);
}
else if(flag==false)
{
    scheduler.shutdown();
}

jobDetail と simpleTrigger は一目瞭然です。

それが役に立てば幸い。:)

于 2015-05-22T10:47:35.450 に答える