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

  • Facebook
  • Twitter
  • Reddit
  • LinkedIn
  • DZone
  • Add to favorites
  • Email
  • RSS
  • Delicious
  • Live