Task scheduling open source framework Quartz dynamically add, modify and delete scheduled tasks

Quartz is an open source job scheduling framework that provides a simple yet powerful mechanism for job scheduling in Java applications. The Quartz framework includes scheduler listeners, job and trigger listeners. You can configure job and trigger listeners as global listeners or as job and trigger-specific listeners. Quartz allows developers to schedule jobs based on time intervals (or days). It implements a many-to-many relationship between jobs and triggers, and can also associate multiple jobs with different triggers. Quartz-integrated applications can reuse jobs from different events, and can combine multiple jobs for an event. And it can also be integrated with Spring configuration. Quartz is far more functional than the Timer that comes with JDK, very good and powerful! Well, go directly to the code:

/**
 * @Description:  
 *
 * @Title: QuartzManager.java
 * @Package com.joyce.quartz
 * @Copyright: Copyright (c) 2014
 *
 * @author Comsys-LZP
 * @date 2014-6-26 03:15:52 PM
 * @version V2.0
 */  
package com.joyce.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
 * @Copyright: Copyright (c) 2014
 *  
 * @author Comsys-LZP
 * @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
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @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);// task name, task 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 up  
            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
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @date 2014-6-26 03:48:15 pm
     * @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 the default task group name, trigger name, trigger group name)
     *  
     * @param jobName
     * @param time
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @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 task
     *  
     * @param triggerName
     * @param triggerGroupName
     * @param time
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @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;  
                // Change the time  
                ct.setCronExpression(time);  
                // restart trigger  
                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
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @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);// delete the job  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
  
    /**
     * @Description: remove a task
     *  
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @date 2014-6-26 03:50:01 pm
     * @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 the job  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
  
    /**
     * @Description: start all timed tasks
     *  
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @date 2014-6-26 03:50:18 PM
     * @version V2.0
     */  
    public static void startJobs() {  
        try {  
            Scheduler sched = gSchedulerFactory.getScheduler();  
            sched.start();  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
  
    /**
     * @Description: Close all timed tasks
     *  
     *  
     * @Title: QuartzManager.java
     * @Copyright: Copyright (c) 2014
     *  
     * @author Comsys-LZP
     * @date 2014-6-26 03:50:26 PM
     * @version V2.0
     */  
    public static void shutdownJobs() {  
        try {  
            Scheduler sched = gSchedulerFactory.getScheduler();  
            if (!sched.isShutdown()) {  
                sched.shutdown();  
            }  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
}  


The above are the common operations of quartz task scheduling for tasks, encapsulated for external calls! So we need the execution of the task:

/**
 * @Description:  
 *
 * @Title: QuartzJob.java
 * @Package com.joyce.quartz
 * @Copyright: Copyright (c) 2014
 *
 * @author Comsys-LZP
 * @date 2014-6-26 03:37:11 PM
 * @version V2.0
 */  
package com.joyce.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
 * @Copyright: Copyright (c) 2014
 *
 * @author Comsys-LZP
 * @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())+ "★★★★★★★★★★★");    
    }  
}  


Ok, let's test it out:

package com.joyce.quartz.main;  
  
import com.joyce.quartz.QuartzJob;  
import com.joyce.quartz.QuartzManager;  
  
/**
 * @Description: Test class
 *
 * @ClassName: QuartzTest
 * @Copyright: Copyright (c) 2014
 *
 * @author Comsys-LZP
 * @date 2014-6-26 03:35:05 pm
 * @version V2.0
 */  
public class QuartzTest {  
    public static void main(String[] args) {  
        try {  
            String job_name = "Dynamic Job Scheduling";  
            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] successful");    
              
            System.out.println("[Add a scheduled task again] Start (output every 10 seconds)...");    
            QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?");    
            Thread.sleep(60000);    
            System.out.println("[Remove timing] Start...");    
            QuartzManager.removeJob(job_name);    
            System.out.println("[Remove timing] successful");  
        } catch (Exception e) {  
            e.printStackTrace ();  
        }  
    }  
}  


Reference: http://blog.csdn.net/pengpegv5yaya/article/details/37595889

clover distributed task scheduling system
https://blog.csdn.net/stark_summer/article/details/43449621

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327066884&siteId=291194637
Recommended