2013-04-23 13 views
6

は、私はそれを理解し、それはJVMの立場から、仕事がまだあることを意味し、バックfalseとして来クォーツジョブとdeletedを想定すると、次のコマンドクォーツはジョブを削除できません。

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

を考えます。この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); 
    } 
+0

一つの理由は、私は間違ったジョブグループ値を与えていたでした。 – Mateen

答えて

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

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

SchedulerExceptionの後に一般的なExceptionのキャッチを追加してみてください(より良い例外処理があります。エラーが発生しているとわからない場合は、役立つでしょう)。

クォーツジョブをビルドするときは、jobBuilder.storeDurably(false)を使用できます。これにより、アクティブなトリガーが関連付けられていないときにクォーツジョブが自動的に削除されます。

0

ジョブのスケジュールながら1

job.getJobDataMap().put("JOB_NUMBER",input); 
      job.getJobDataMap().put("TRIGGER_NAME",input); 

以下に設定では、ジョブのアクションを実行し、私は仕事を削除することができませんでした理由

TriggerKey triggerKey = new TriggerKey(jobCtx.getMergedJobDataMap().get("TRIGGER_NAME").toString(),jobCtx.getMergedJobDataMap().get("TRIGGER_NAME").toString()); 
//condition 
scheduler.unscheduleJob(triggerKey); 
scheduler.deleteJob(JobKey.jobKey(jobCtx.getMergedJobDataMap().get("JOB_NUMBER").toString(),jobCtx.getMergedJobDataMap().get("JOB_NUMBER").toString())); 
関連する問題