Multi-Trigger usage in Quartz 2
Quartz jobs can be scheduled by using more than one trigger. A sample application is below :
STEP 1 : CREATE MAVEN PROJECT
A maven project is created as below. (It can be created by using Maven or IDE Plug-in).
STEP 2 : LIBRARIES
Quartz dependencies are added to Maven’ s pom.xml. These dependency libraries will be downloaded by Maven Central Repository.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>OTV_Quartz2_With_MultiTrigger</groupId> <artifactId>OTV_Quartz2_With_MultiTrigger</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- Quartz library--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.0.2</version> </dependency> <!-- Log4j library --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> </project>
STEP 3 : CREATE NEW JOB
A new Job is created by implementing the Quartz Job interface as below. FirstTestJob Class specifies business logic which will be scheduled.
package com.otv.job;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* @author onlinetechvision.com
* @since 18 Sept 2011
* @version 1.0.0
*
*/
public class FirstTestJob implements Job {
private Logger log = Logger.getLogger(FirstTestJob.class);
public void execute(JobExecutionContext jExeCtx) throws JobExecutionException {
log.debug("FirstTestJob triggered by "+jExeCtx.getTrigger().getKey().getName()+" runs successfully.");
}
}
STEP 4 : LINK FirstTestJob WITH JOBDETAIL OBJECT
Created FirstTestJob class is linked with a JobDetail object.
// specify the job' s details..
JobDetail firstTestJobDetail = JobBuilder.newJob(FirstTestJob.class)
.withIdentity("firstTestJob")
.build();
STEP 5 : CREATE NEW TRIGGERs
Two new triggers are created as below. Trigger Class specifies running period of the job which will be scheduled.
// specify the running period of the job
Trigger firstTrigger = TriggerBuilder.newTrigger()
.withIdentity("FirstTrigger")
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(15)
.repeatForever())
.build();
// specify the running period of the job
Trigger secondTrigger = TriggerBuilder.newTrigger()
.withIdentity("SecondTrigger")
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatMinutelyForever())
.build();
STEP 6 : CREATE SchedulerFactory
A new SchedulerFactory is created and a Scheduler object is gotten from SchedulerFactory Class.
SchedulerFactory schFactory = new StdSchedulerFactory(); Scheduler sch = schFactory.getScheduler();
STEP 7 : START Scheduler
Scheduler Object is started.
// Tell quartz to schedule the job using our trigger sch.start();
STEP 8 : START Scheduler
TestJob is scheduled.
// Tell quartz to schedule the job using our trigger sch.scheduleJob(job, trigger);
STEP 9 : FULL EXAMPLE
package com.otv;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.otv.job.FirstTestJob;
/**
* @author onlinetechvision.com
* @since 18 Sept 2011
* @version 1.0.0
*
*/
public class JobsScheduler {
public static void main(String[] args) {
try {
// specify the job' s details..
JobDetail firstTestJobDetail = JobBuilder.newJob(FirstTestJob.class)
.withIdentity("firstTestJob")
.build();
// specify the running period of the job
Trigger firstTrigger = TriggerBuilder.newTrigger()
.withIdentity("FirstTrigger")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(15)
.repeatForever())
.build();
// specify the running period of the job
Trigger secondTrigger = TriggerBuilder.newTrigger()
.withIdentity("SecondTrigger")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.repeatMinutelyForever())
.build();
// create trigger list
List<Trigger> triggerList = new ArrayList<Trigger>();
triggerList.add(firstTrigger);
triggerList.add(secondTrigger);
// link jobdetail and trigger list
Map<JobDetail,List<Trigger>> map = new HashMap<JobDetail, List<Trigger>>();
map.put(firstTestJobDetail, triggerList);
//schedule the job
SchedulerFactory schFactory = new StdSchedulerFactory();
Scheduler sch = schFactory.getScheduler();
sch.start();
sch.scheduleJobs(map, true);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
STEP 10 : OUTPUT
When JobsScheduler Class is run, the output will be seen as below :
18.09.2011 12:03:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by <strong>SecondTrigger</strong> runs successfully. 18.09.2011 12:03:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:03:34 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:03:49 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:04:04 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:04:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:04:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by <strong>SecondTrigger</strong> runs successfully. 18.09.2011 12:04:34 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:04:49 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:05:04 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:05:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by FirstTrigger runs successfully. 18.09.2011 12:05:19 DEBUG (FirstTestJob.java:13) - FirstTestJob triggered by <strong>SecondTrigger</strong> runs successfully.
STEP 11 : DOWNLOAD
OTV_Quartz2_With_MultiTrigger




Eren Avşaroğulları is highly motivated open source developer and enthusiast on Java and related open source technologies. He has professional software design & development experiences in different domains such as telecommunication, finance and control & automation 
