環境
こちらの記事と同様です。
Quartz Schedulerでワンタイムジョブ発行
動作
- WEBサーバの形式でアプリケーションを実行します。
- /api/job/onetime?value=fooにPOSTリクエストすると、ジョブを実行開始するだけですぐさまレスポンス200が返ってきます。
- すぐにジョブが実行されて、サーバログに「Executiong HelloJob ! : [valueの値"foo"] | at [実行日時]」が出力されます。
コード
ジョブの定義
こちらの記事と同様です。
Quartz Schedulerでワンタイムジョブ発行 - ジョブの定義
スケジューラの定義・生成
こちらの記事と同様です。
Quartz Schedulerでワンタイムジョブ発行 - スケジューラの定義・生成
HelloJobを実行するためのサンプルアプリ(RESTコントローラ)
クラスの定義はこちらの記事と同様です。
Quartz Schedulerでワンタイムジョブ発行 - HelloJobを実行するためのサンプルアプリ(RESTコントローラ)
メソッドだけ違います。
JobResource.java
/**
* ジョブの即時実行
*
* @param value
* @return
* @throws URISyntaxException
*/
@ApiOperation(value = "ジョブの即時実行", notes = "ワンタイムジョブを即時実行します。ジョブの登録処理だけですぐにレスポンスが返ってきます。")
@RequestMapping(value = "/kick",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> kickJob(
@RequestParam(value = "value", defaultValue = "lol") String value
) throws URISyntaxException, SchedulerException {
log.debug("REST request to kick job just now : " + value);
JobDetail job = newJob(HelloJob.class)
.withIdentity("job2", "group1")
.storeDurably() // <==========※これが必要!記述してないと例外「org.quartz.SchedulerException: Jobs added with no trigger must be durable.」が発生します。
.build();
job.getJobDataMap().put("value", value);
scheduler.addJob(job, true);
scheduler.triggerJob(job.getKey());
return ResponseEntity.ok().body("job kicked! : " + value);
}