2017-04-04 6 views
1

私はQuartzを使用してJavaでジョブをスケジュールしています。 スケジューラは無期限に繰り返します。 Job.classで特定の例外が発生した場合は、スケジューラをシャットダウンする必要があります。 ジョブをシャットダウン()にスケジューリングクラスに通知するにはどうすればよいですか?クォーツ - ジョブ変数に基づくシャットダウンスケジューラ

おかげで、 RayK

答えて

1

クォーツの仕事は、そのexecute(JobExecutionContext)メソッドを呼び出すことによって実行されます。このJobExecutionContextオブジェクトには、ジョブを実行しているSchedulerにアクセスするためのgetScheduler()メソッドがあります。

だから、あなただけ行うことができます:

class YourJob implements Job { 
    //... 
    @Override 
    public void execute(final JobExecutionContext context) throws JobExecutionException { 
     //... 
     if (someCondition) { 
      try { 
       context.getScheduler().shutdown(); 
      } catch (SchedulerException e) { 
       // log or rethrow! 
      } 
     } 
     //... 

しかし、私は仕事を実行しているの途中でスケジューラをシャットダウンすることは良い考えであれば、本当にわかりません。なぜあなたはそれをしたいのですか?あなたがやろうとしているすべてが再び実行されているから、いくつかのジョブを停止している場合、それは良いかもしれちょうどunscheduleこと:仕事の

スケジュールの解除特にトリガー:

// Unschedule a particular trigger from the job (a job may have more than one trigger) 
scheduler.unscheduleJob(triggerKey("trigger1", "group1")); 

ジョブを削除し、そのトリガ

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

のすべてのスケジュールの解除は、ここでのシナリオだ - 毎朝、ファイルのセットをフォルダに送信されます。私のコードはこのフォルダから3Aと7Aの間のファイルを探します。ファイルが見つかったら、ファイルを移動して処理します。その後ジョブが実行されるたびに、ファイルが見つからず(ファイルが移動された)、何も処理されません。翌朝、もう一度プロセスが始まります。問題は、その日にそのフォルダに移動さ​​れたファイルがない場合です。午前7時に処理が行われていない場合は、次の日のファイルを処理しないようにスケジューラをシャットダウンする必要があります。それらは順番に行う必要があります。 – DropOfGoldenSun

+0

@DropOfGoldenSun Oohhhh 3 AM-7AMの男!申し訳ありませんが、私はあなたを認識しませんでした。私はあなたの言ったことに対処するために私の答えを編集します。 – walen

+0

それは私です。私はまだこれをすべて理解しようとしています。ご協力いただきありがとうございます。 – DropOfGoldenSun

関連する問題