2017-06-06 7 views
1

以下のスニペットの両方がこのエラーを与える:スケジュールされたクォーツジョブを更新するにはどうすればよいですか?

org.quartz.SchedulerException: Jobs added with no trigger must be durable.

JobDetail job = scheduler.getJobDetail(jobKey(jobInfo)); 
    job.getJobDataMap().put(JOB_CONTENT, objectMapper.writeValueAsString(jobInfo)); 
    scheduler.addJob(job, true); 


    JobDetail job = JobBuilder 
     .newJob(MyJob.class) 
     .usingJobData(JOB_CONTENT, objectMapper.writeValueAsString(jobInfo)) 
     .withIdentity(jobKey(jobInfo)) 
     .build(); 
    scheduler.addJob(job, true); 

答えて

2

addJob()は添付なしのトリガーでジョブを追加するためのものです:それはあなたが望むものであるならば、ちょうどJobBuilderにstoreDurably()に呼び出しを追加します。私が推測することができるだけで、以前のトリガーを保持している間にジョブを更新したい場合は、既存のトリガーを最初に取得してから、トリガーに変更が必要ない場合はscheduler.scheduleJob(newJob, oldTrigger);それ以外の場合は、TriggerBuilder.getTriggerBuilder();を使用してコピーを作成し、変更を加えて、最終的にscheduler.scheduleJob(newJob, newTrigger)を呼び出してビルダーを入手してください。

0

耐久性のないジョブでは、代わりにscheduler.addJob(job, true, true)を3つのパラメータで使用する必要があります。 3番目のパラメータは、スケジューリングされるまで、つまりトリガを追加するまで(RAMに)ジョブを保存するようにQuartzに指示します。

関連する問題