LoginSignup
10
7

More than 5 years have passed since last update.

quartz APIの基礎

Posted at

はじめに

相変わらずツマラナイサンプルですが、社内の人に向けて書いてみました。
quartz APIについての情報が少ないのでまとめておきます。

基本的なこと

quartzにはJOBとTriggerという概念があります。

  • JOB実行したい処理を書きます。JOBインタフェースをimplementsすればなんでもかけます。
  • Triggerはスケジュールを表現するクラスです。cron expressionが使えますが、cronexpressionを使わずともAPIを使って同じことはできます。(今回は割愛)
  • 上記のJOBとTriggerをScheduleインタフェースを使って操作します。

JOBとTriggerをまとめて登録

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        JobDetail job = JobBuilder
                .newJob(EbsSnapshotJob.class)
                .withIdentity(EbsSnapshotJob.class.getSimpleName(),
                        Services.AWS.getName()).storeDurably().build();

        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("12345", "4")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("00 */20 * * * ?")
                                .inTimeZone(TimeZone.getTimeZone("Asia/Tokyo")))
                .forJob(job).startNow().build();

        scheduler.scheduleJob(job, trigger);

JOBの登録

ExamplesではJOBの登録とTriggerの登録を同時にするものしかありませんが、もちろんJOBのみの登録ができます。storeDurably()を設定しないとJOBのみの登録できません。

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        JobDetail job = JobBuilder.newJob(EbsSnapshotJob.class)
                .withIdentity(EbsSnapshotJob.class.getCanonicalName(), Services.AWS.getName())
                .storeDurably()
                .build();
        scheduler.addJob(job,false);

JOBの削除

JOBの削除を行うにはJobKeyを設定し、deleteJobを呼び出します。
この時紐づくTriggerも全部消えてしまいますので使用には十分気をつけましょう。

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        JobKey jobKey = new JobKey(EbsSnapshotJob.class.getSimpleName(), Services.AWS.getName());
        scheduler.deleteJob(jobKey);

Triggerの登録を行う(JOBは存在)

TriggerにforJobを設定してあげれば良いです。

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        JobDetail job = JobBuilder.newJob(EbsSnapshotJob.class)
                .withIdentity(EbsSnapshotJob.class.getCanonicalName(), Services.AWS.getName())
                .build();

        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("12345", "4")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("00 */10 * * * ?")
                                .inTimeZone(TimeZone.getTimeZone("Asia/Tokyo"))).forJob(job).startNow().build();

        scheduler.scheduleJob(trigger);

Triggerの変更

rescheduleしてあげます。下記の例ではTriggerKeyのTriggerをCronTriggerで定義したものに置き換えています。

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("12345", "4")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("00 */20 * * * ?")
                                .inTimeZone(TimeZone.getTimeZone("Asia/Tokyo"))).forJob(job).startNow().build();

        TriggerKey triggerKey = new TriggerKey("12345", "4");
        scheduler.rescheduleJob(triggerKey, trigger);

Triggerの削除

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        TriggerKey triggerKey = new TriggerKey("12345", "4"); 
        scheduler.unscheduleJob(triggerKey);
10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7