Quartz Scheduler - Trigger and CronTrigger
November 20, 2023
Quartz is an open source job scheduling library which can be used to create simple or complex schedules in Java. Quartz provides easy steps to schedule a job. It provides a Job interface using which we have to create our job that will be scheduled. Now instantiate Scheduler using SchedulerFactory. Create a JobDetail and Trigger that will be registered to Scheduler and finally start it. Trigger is the base interface for all triggers. One such implementation is CronTrigger which uses cron- expression with the help of CronScheduleBuilder. Here in this page we will describe each and every term for Quartz scheduler getting started. We will provide two examples using Trigger and CronTrigger.
Job, JobExecutionContext and JobKey
org.quartz.Job is an interface which is implemented by a class to define a job which will run by quartz scheduler. The class must have a no argument public constructor.Job
interface has a method
execute(JobExecutionContext context)
JobExecutionContext
is the argument of this method. This class provides the information given to JobDetail
. One such information is JobKey
which uniquely identifies a JobDetail
. We can use these classes as below.
JobDetail jobDetail = context.getJobDetail(); JobKey key = jobDetail.getKey();
SchedulerFactory and Scheduler
To start our job by scheduler we need the instance ofScheduler
which is obtained by SchedulerFactory
.
SchedulerFactory schfa = new StdSchedulerFactory(); Scheduler sch = schfa.getScheduler();
JobDetail
and Trigger
instances to Scheduler
using its scheduleJob()
method.
sch.scheduleJob(jobdetail, trigger)
sch.start(); Thread.sleep(80L * 1000L); sch.shutdown(true);
JobDetail and JobBuilder
org.quartz.JobDetail registers theJob
. We have to provide a unique identity to it using job name and group name within a single scheduler. In this way each and every instances of JobDetail
are created uniquely. JobBuilder
creates JobDetail
.
JobDetail jobdetail = JobBuilder.newJob(MyJob.class) .withIdentity("myjob1", "mygroup1").build();
Trigger and TriggerBuilder
org.quartz.Trigger is the base interface for all triggers. This provides the common methods to all implemented triggers. To instantiateTrigger
, we need to use TriggerBuilder
.
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("mytrigger1", "mygroup1") .startAt(new Date(Calendar.getInstance().getTimeInMillis()+ 5000)).build();
CronTrigger and CronScheduleBuilder
org.quartz.CronTrigger helps to start a job using Unix cron- like schedule definitions. CronTrigger
schedules a repetitive job for a given cron-expression. To do this we need a ScheduleBuilder
. There are many implementations of ScheduleBuilder
and one of which is CronScheduleBuilder
which accepts cron-expression as an input.
CronTrigger crontrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "crongroup1") .withSchedule(craeteSchedule("0 0/1 * 1/1 * ? *")).build();
Gradle File
Find the gradle file to resolve JAR dependencies of Quartz.build.gradle
apply plugin: 'java' apply plugin: 'eclipse' archivesBaseName = 'concretepage' version = '1' repositories { mavenLocal() mavenCentral() } dependencies { compile 'org.quartz-scheduler:quartz:2.2.1' } jar { manifest { attributes 'Main-Class': 'com.concretepage.TriggerQuartzTest' } }
Create a Job
Create a simple Job.MyJob.java
package com.concretepage.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDetail jobDetail = context.getJobDetail(); JobKey key = jobDetail.getKey(); System.out.println("For Job key:"+ key +", Current Date:"+ new Date()); } }
Trigger Example
Find first example to schedule a job. Here the job will be schedules only one time.TriggerQuartzTest.java
package com.concretepage; import java.util.Calendar; import java.util.Date; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.concretepage.job.MyJob; public class TriggerQuartzTest { public static void main(String[] args) throws SchedulerException, InterruptedException { SchedulerFactory schfa = new StdSchedulerFactory(); Scheduler sch = schfa.getScheduler(); JobDetail jobdetail = JobBuilder.newJob(MyJob.class) .withIdentity("myjob1", "mygroup1").build(); //Executes only one time Trigger trigger = TriggerBuilder.newTrigger().withIdentity("mytrigger1", "mygroup1") .startAt(new Date(Calendar.getInstance().getTimeInMillis()+ 5000)).build(); sch.scheduleJob(jobdetail, trigger); sch.start(); Thread.sleep(70L * 1000L); sch.shutdown(true); } }
For Job key:mygroup1.myjob1, Current Date:Thu May 21 14:37:10 IST 2015
CronTrigger Example
In this example, we are using cron-expression to schedule the job.CronTriggerQuartzTest.java
package com.concretepage; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.ScheduleBuilder; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.concretepage.job.MyJob; public class CronTriggerQuartzTest { public static void main(String[] args) throws SchedulerException, InterruptedException { SchedulerFactory schfa = new StdSchedulerFactory(); Scheduler sch = schfa.getScheduler(); JobDetail jobdetail = JobBuilder.newJob(MyJob.class) .withIdentity("cronjob1", "crongroup1").build(); //Executes after every minute 0 0/1 * 1/1 * ? * CronTrigger crontrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "crongroup1") .withSchedule(craeteSchedule("0 0/1 * 1/1 * ? *")).build(); sch.scheduleJob(jobdetail, crontrigger); jobdetail = JobBuilder.newJob(MyJob.class) .withIdentity("cronjob2", "crongroup1").build(); //Executes after every 2 minute 0 0/2 * 1/1 * ? * crontrigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "crongroup1") .withSchedule(craeteSchedule("0 0/2 * 1/1 * ? *")).build(); sch.scheduleJob(jobdetail, crontrigger); sch.start(); Thread.sleep(100L * 1000L); sch.shutdown(true); } private static ScheduleBuildercraeteSchedule(String cronExpression){ CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule(cronExpression); return builder; } }
For Job key:crongroup1.cronjob1, Current Date:Thu May 21 14:46:00 IST 2015 For Job key:crongroup1.cronjob2, Current Date:Thu May 21 14:46:00 IST 2015 For Job key:crongroup1.cronjob1, Current Date:Thu May 21 14:47:00 IST 2015