Quartz 1.7 example how to implement the call between schedule trigger jobs

http://blog.csdn.net/liuxiao723846/article/details/46533059


quote


1. Introduction to

Quartz Quartz is an open-source project founded by James House. It is a powerful job scheduling tool that can execute tasks according to plan, schedule, loop or execute what we need to do at a certain time, which can give us Great help at work. For example, in your program, you need to export a report on the first day of every month, send an email regularly, or the program needs to perform a certain task every other period...etc., you can use Quartz to solve it.


Quartz can be roughly divided into three main cores:


1. Scheduler Scheduler: It is a plan scheduler container. The container can hold many JobDetails and Triggers. When the container is started, each JobDetail in it will automatically work step by step according to the Trigger. To execute.


2. Task Job: The specific content to be executed. JobDetail: The specific executable scheduler, including the plan and strategy of this task scheduling.


3. Trigger: The configuration of scheduling parameters, when to execute the scheduling.


It can be understood in this way: the scheduler is equivalent to a container, loaded with tasks and triggers. Tasks and triggers are bound together, but a task can correspond to multiple triggers, but a trigger can only correspond to one task. When JobDetail and Trigger are registered on the scheduler container, an assembled task job (a pair composed of JobDetail and Trigger) is formed, which can be scheduled and executed with the container startup.

II . Example: The following example uses quartz1.7 Realize the switching, adding and removing of two tasks (jobs)
1. Task scheduling:
[java] view plain copy
package quartz; 
 
import org.quartz.CronTrigger; 
import org.quartz.JobDetail; 
import org.quartz.Scheduler; 
import org.quartz.SchedulerFactory; 
import org.quartz.impl.StdSchedulerFactory; 
 
/**
* @Description: Scheduled task management class

* @ClassName: QuartzManager
* @date 2014-6-26 03:15:52 PM
* @version V2.0
*/ 
public class QuartzManager { 
    private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); 
    private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME"; 
    private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME" ; 
 
    /**
     * @Description: Add a scheduled task, use the default task group name, trigger name, trigger group name
     * 
     * @param jobName
     * task name
     * @param cls
     * task
     * @param time
     * time setting, refer to quartz documentation
     * 
     * @date 2014-6-26 03:47:44 pm
     * @version V2.0
     */ 
    @SuppressWarnings ("unchecked") 
    public static void addJob(String jobName, Class cls, String time) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// job name, job group, task execution class 
            // trigger 
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// trigger name, trigger group 
            trigger.setCronExpression(time);// trigger time setting 
            sched.scheduleJob(jobDetail, trigger); 
            // start 
            if (!sched .isShutdown()) { 
                sched.start(); 
            } 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: add a scheduled task
     * 
     * @param jobName
     * task name
     * @ param jobGroupName
     * task group name
     * @param triggerName
     * trigger name
     * @param triggerGroupName
     * trigger group name
     * @param jobClass
     * task
     * @param time
     * time setting, refer to quartz documentation
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 03:00 PM 48:15
     * @version V2.0
     */ 
    @SuppressWarnings("unchecked") 
    public static void addJob(String jobName, String jobGroupName, 
            String triggerName, String triggerGroupName, Class jobClass, 
            String time) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler (); 
            JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// task name, task group, task execution class 
            // trigger 
            CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// trigger name, trigger group 
            trigger. setCronExpression(time);// Trigger time setting 
            sched.scheduleJob(jobDetail, trigger); 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: Modify the trigger time of a task (use default task group name, trigger name, trigger group name)
     * 
     * @param jobName
     * @param time
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 03:49:21 PM
     * @version V2.0
     */ 
    @SuppressWarnings("unchecked") 
    public static void modifyJobTime(String jobName, String time) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME); 
            if (trigger == null) { 
                return; 
            } 
            String oldTime = trigger.getCronExpression(); 
            if (!oldTime.equalsIgnoreCase(time)) { 
                JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME); 
                Class objJobClass = jobDetail.getJobClass(); 
                removeJob(jobName); 
                addJob(jobName, objJobClass, time); 
            } 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: Modify the trigger time of a job
     * 
     * @param triggerName
     * @param triggerGroupName
     * @param time
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 03:49:37 PM
     * @version V2.0
     */ 
    public static void modifyJobTime(String triggerName, 
            String triggerGroupName, String time ) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName); 
            if (trigger == null) { 
                return; 
            } 
            String oldTime = trigger.getCronExpression(); 
            if (!oldTime.equalsIgnoreCase(time)) { 
                CronTrigger ct = (CronTrigger) trigger; 
                // 修改时间 
                ct.setCronExpression(time); 
                // 重启触发器 
                sched.resumeTrigger(triggerName, triggerGroupName); 
            } 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: remove a task (use default task group name, trigger name, trigger group name)
     * 
     * @param jobName
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 03:49:51 PM
     * @version V2.0
     */ 
    public static void removeJob(String jobName) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME) ;// stop trigger 
            sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// remove trigger 
            sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: 移除一个任务
     * 
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 下午03:50:01
     * @version V2.0
     */ 
    public static void removeJob(String jobName, String jobGroupName, 
            String triggerName, String triggerGroupName) { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            sched.pauseTrigger(triggerName, triggerGroupName);// stop trigger 
            sched.unscheduleJob(triggerName, triggerGroupName);// remove trigger 
            sched.deleteJob(jobName, jobGroupName);// delete task 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description: start all timed tasks
     * 
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 03:50 PM: 18
     * @version V2.0
     */ 
    public static void startJobs() { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            sched.start(); 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    /**
     * @Description:关闭所有定时任务
     * 
     * 
     * @Title: QuartzManager.java
     * @date 2014-6-26 下午03:50:26
     * @version V2.0
     */ 
    public static void shutdownJobs() { 
        try { 
            Scheduler sched = gSchedulerFactory.getScheduler(); 
            if (!sched.isShutdown()) { 
                sched.shutdown(); 
            } 
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
    } 

2. Specific task execution:
[java] view plain copy
package quartz; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import org. quartz.Job; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
 
/**
* @Description: Task execution class
*
* @ClassName: QuartzJob
* @date 2014-6-26 03:37:11 PM
*@ version V2.0
*/ 
public class QuartzJob implements Job { 
 
    @Override 
    public void execute(JobExecutionContext arg0) throws JobExecutionException { 
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "I am task 1---- -------------");   
    } 


Specific task 2:
[java] view plain copy
package quartz; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import org.quartz. Job; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
 
/**
* @Description: Job execution class
*
* @ClassName: QuartzJob
* @date 2014-6-26 03:37:11 PM
* @version V2 .0
*/ 
public class QuartzJob implements Job { 
 
    @Override 
    public void execute(JobExecutionContext arg0) throws JobExecutionException { 
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "我是任务2===================");   
    } 


3、测试:
[java] view plain copy
package quartz; 
 
 
/**
* @Description: 测试
*
* @ClassName: QuartzTest
* @version V2.0
*/ 
public class QuartzTest { 
    public static void main(String[] args) { 
        try { 
            String job_name = "动态任务调度"; 
            System.out.println("[System startup] starts (output every 1 second)...");   
            QuartzManager.addJob(job_name, QuartzJob.class, "0/1 * * * * ?");   
             
            Thread.sleep (5000);   
            System.out.println("[Modification time] starts (output every 2 seconds)...");   
            QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?");   
            Thread.sleep (6000);   
            System.out.println("[Remove timing] start...");   
            QuartzManager.removeJob(job_name);   
            System.out.println("[Remove timing] succeeded");   
             
            System.out. println("[Add a scheduled task again] Start (output every 10 seconds)...");   
            QuartzManager.addJob(job_name+"1", QuartzJob1.class, "    */10 * * * * ?");   
            Thread.sleep(60000);   
            System.out.println("[Remove timing] Start...");   
            QuartzManager.removeJob(job_name+"1");   
            System.out.println("[Remove timing] succeeded"); 
        } catch (Exception e ) { 
            e.printStackTrace(); 
        } 
    } 


Code download: http://download.csdn.net/detail/liuxiao723846/8826285
Article reference: http://blog.csdn.net/pengpegv5yaya/article/details/37595889


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326070013&siteId=291194637