2012-03-27 6 views
25

すぐにトリガーするジョブを作成することは可能ですか? ジョブをトリガーしたいときは、現在の日付と時刻のcron式文字列を作成しました。複雑すぎると思いますが、すぐにジョブをトリガーする方法はありますか?java quartz schedulerすぐに新しいジョブを起動する

ありがとうございました。

答えて

23

クォーツSchedulerに登録されているすべてのジョブは、名前とグループで構成されるJobKeyによって一意に識別されます。あなたはインスタンスのtriggerJob(JobKey jobKey)を呼び出すことによって、与えられたJobKeyの仕事をすぐに発砲することができます。

//Create a new Job 
JobKey jobKey = JobKey.jobKey("myNewJob", "myJobGroup"); 
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity(jobKey).storeDurably().build(); 

//Register this job to the scheduler 
scheduler.addJob(job, true); 

//Immediately fire the Job MyJob.class 
scheduler.triggerJob(jobKey); 

注:

  • schedulerは、アプリケーション全体で使用Schedulerインスタンスです。そのstart()メソッドは、作成後に既に呼び出されている必要があります。

  • ジョブは、トリガーまたはcronを付加できない耐久性のあるジョブです。プログラムで起動するのは、triggerJob(JobKey jobKey)です。

+0

「SimpleTrigger」を使用せず、即時実行になる 'scheduler.scheduleJob()'を使用するのはなぜですか? – basZero

+1

FYI JobKeyは1.5.2 APIの一部ではありません。 –

+0

ジョブを耐久性(.storeDurably())に設定する必要がありますが、手動で(scheduler.deleteJob()を使用して)きれいにする必要があります。私は人々がこの問題にどう対処するのだろうか? – leeyuiwah

46

うん、すぐクロン式時に待っているのではなく、あなたの仕事を発射するには、以下のTriggerを使用します。

String jobName = ""; // Your Job Name 
    String groupName = ""; // Your Job Group 
    Trigger trigger = TriggerBuilder.newTrigger() 
       .withIdentity(jobName, groupName) 
       .startNow() 
       .build(); 
+6

メモリリークを設定するよりもずっと優れていますdurable = true;) – BrunoJCM

0

"JobKey"は、2つのキーの文字列値でオンザフライで作成できます。

IScheduler sched = /* however you get your scheduler*/; 

sched.TriggerJob(new JobKey("myname", "mygroup")); 
+0

少なくとも簡単な説明を追加してください。 –

関連する問題