Java Example: Dynamic Job Scheduling with Quartz Java Example: Dynamic Job Scheduling with Quartz spring spring

Java Example: Dynamic Job Scheduling with Quartz


Example code for Dynamic Quartz JOB Scheduling:

Maven Dependencies

         <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>1.8.5</version>         </dependency>            <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>${spring.version}</version>        </dependency>

Application Context File (dynamic-jobs.xml)

<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd            http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">    <!-- The Task Bean-->    <bean id="myTask" class="com.xxx.example.dynamicjob.MyTask" />    <!-- The quartz scheduler configuration -->    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"/></beans>

Java Class for Task

package com.xxx.example.dynamicjob;    public class MyTask    {        public void performAction() {            System.out.println("Hey, you reached me...:)");        }              }

Java Class to Create Dynamic Job

package com.xxx.example.dynamicjob;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;import org.springframework.scheduling.quartz.CronTriggerBean;import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;public class DynamicJobExample {    /**    * @param args    */    public static void main(String[] args) {                ClassPathResource res = new ClassPathResource("dynamic-jobs.xml");                XmlBeanFactory factory = new XmlBeanFactory(res);                //get the quartzFactory bean                Scheduler scheduler = (Scheduler) factory.getBean("scheduler");                //get the task bean                MyTask myTask = (MyTask) factory.getBean("myTask");                try {                // create JOB                MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();                jobDetail.setTargetObject(myTask);                jobDetail.setTargetMethod("performAction");                jobDetail.setName("MyJobDetail");                jobDetail.setConcurrent(false);                jobDetail.afterPropertiesSet();                /* SimpleTriggerBean trigger = new SimpleTriggerBean();                trigger.setBeanName("MyTrigger");                trigger.setJobDetail((JobDetail) jobDetail.getObject());                trigger.setRepeatInterval(5000);                trigger.afterPropertiesSet();                */                // create CRON Trigger                CronTriggerBean cronTrigger = new CronTriggerBean();                cronTrigger.setBeanName("CRON0001");                // Execute after each 5 second                String expression = "5 * * * * ?";                cronTrigger.setCronExpression(expression);                cronTrigger.afterPropertiesSet();                //scheduler.scheduleJob(jobDetail, cronTrigger);                scheduler.scheduleJob((JobDetail) jobDetail.getObject(), cronTrigger);                // Start Scheduler                        scheduler.start();                } catch (Exception e) {                                          e.printStackTrace();                }     }}


Spring 4 allows me to do this without any problem (Quartz 2.0) -spring-dispatcher-servlet.xml

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/><task:scheduler id="myScheduler" pool-size="10"/><task:executor id="myExecutor" pool-size="1"/>

Inject above created bean into Spring bean or Service Class

@Servicepublic class DynamicJobExample {@Autowired@Qualifier("myScheduler")private TaskScheduler scheduler;public void schedule() throws ParseException {    scheduler.schedule(new MyTask(), new CronTrigger("5 * * * * ?"));  }}

MyTask Should be a Runnable Class

public class MyTask implements Runnable{@Overridepublic void run() {    System.out.println("Hey, you reached me...:)");  }}

Maven Dependencies are (pom.xml)

<spring.version>4.1.0.RELEASE</spring.version>   <dependency>        <groupId>org.quartz-scheduler</groupId>        <artifactId>quartz</artifactId>        <version>2.2.1</version>    </dependency>


You can create the JobDetail and Trigger objects this way also:

JobDetail jobDetail;String myJobClass = "com.MyJobClass";String myJobName = "myJobName";String myJobGroup ="myJobGroup";Class myJobClassType= Class.forName(myJobClass);            jobDetail =JobBuilder.newJob().ofType(myJobClassType).withIdentity(myJobName, myJobGroup).build();String myGroup = "myGroup";String name = "TriggerName";String expresion = "5 * * * * ?";Trigger trigger = TriggerBuilder.newTrigger().withIdentity(name, myGroup).withSchedule(CronScheduleBuilder.cronSchedule(expresion)).build();