8

Quartz ジョブと次のコマンドが与えられた場合

boolean deleted = scheduler.deleteJob(event.getName(), "some group name")

と仮定deletedするfalseと、私が理解しているように、JVM の観点からは、ジョブがまだそこにあることを意味します。

この2つの質問で:

  1. ジョブを強制的に削除することはできますか?
  2. Quartz がジョブを削除するのを妨げるイベントは何ですか?

例外がスローされない場合、ジョブが見つからなかったと想定しても安全ですか? これは何が原因でしょうか?これが起こる唯一の方法は、そもそもジョブを削除することではないでしょうか?

私は使っている

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>1.8.0</version>
    </dependency>

これは物事を処理する正しい方法だと思いますか? 私の推論は正しいですか?

    boolean deleted;
    try {
        deleted = scheduler.deleteJob(event.getName(), "some group name");
        if (!deleted) {
            logger.warn("Quartz failed to delete the job!" + event.getName() + ". Job not found");
        }
    } catch (SchedulerException e) {
        logger.error("There is an internal Scheduler error", e);
    }
4

2 に答える 2

9
  1. はい、あなたはすでにそれをやっています。
  2. ジョブは現在実行中です。

実行中にジョブを削除する必要がある場合は、ジョブが org.quartz.InterruptableJob を実装していることを確認してください。次に、実行中に呼び出しorg.quartz.Scheduler.interrupt(JobKey)て停止することができます。

SchedulerException の後に一般的な Exception のキャッチを追加してみてください (例外処理が改善され、発生する可能性のあるエラーがわからない場合に役立ちます)。

また、クォーツ ジョブを作成するときに を使用できることにも注意してjobBuilder.storeDurably(false)ください。これにより、関連付けられているアクティブなトリガーがなくなると、クォーツ ジョブが自動的に削除されます。

于 2013-04-23T17:50:03.700 に答える