Quartz的任務的臨時啟動和暫停和恢復

jopen 12年前發布 | 184K 次閱讀 Quartz 作業調度框架

Quartz的任務的臨時啟動和暫停和恢復

 

在項目中需要手動啟停某些服務,那么需要有一個控制這些任務的類。由于任務是有Quartz控制的,我們只需要通過Quartz的相關的API實現相關的功能即可。

package com.gbsoft.rpt.qtz;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;

/**
 * 一個簡單的quartz任務管理器
 * @author 123
 *
 */
public class QuartzSchedule {
    private static  Scheduler scheduler=getScheduler();
    /**
     * 創建一個調度對象
     * @return
     * @throws SchedulerException
     */
    private static Scheduler getScheduler() {
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler scheduler=null;
            try {
                scheduler = sf.getScheduler();
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
            return scheduler;
    }
    public static Scheduler getInstanceScheduler(){
        return scheduler;
    }

    /**
     * 啟動一個調度對象
     * @throws SchedulerException
     */
    public  void start() throws SchedulerException
    { 
        scheduler.start();
    }

    /**
     * 檢查調度是否啟動
     * @return
     * @throws SchedulerException
     */
    public  boolean isStarted() throws SchedulerException
    {
        return scheduler.isStarted();
    }

    /**
     * 關閉調度信息
     * @throws SchedulerException
     */
    public  void shutdown() throws SchedulerException   {
        scheduler.shutdown();
    }
    /**
     * 添加調度的job信息
     * @param jobdetail
     * @param trigger
     * @return
     * @throws SchedulerException
     */
    public  Date scheduleJob(JobDetail jobdetail, Trigger trigger)
            throws SchedulerException{
                return scheduler.scheduleJob(jobdetail, trigger); 
    }
    /**
     * 添加相關的觸發器
     * @param trigger
     * @return
     * @throws SchedulerException
     */
    public  Date scheduleJob(Trigger trigger) throws SchedulerException{
        return scheduler.scheduleJob(trigger);
    }
     /**
      * 添加多個job任務
      * @param triggersAndJobs
      * @param replace
      * @throws SchedulerException
      */
     public  void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs, boolean replace) throws SchedulerException
     {
        scheduler.scheduleJobs(triggersAndJobs, replace);
    }
    /**
     * 停止調度Job任務
     * @param triggerkey
     * @return
     * @throws SchedulerException
     */
    public  boolean unscheduleJob(TriggerKey triggerkey)
            throws SchedulerException{
        return scheduler.unscheduleJob(triggerkey);
    }

    /**
     * 停止調度多個觸發器相關的job
     * @param list
     * @return
     * @throws SchedulerException
     */
    public  boolean unscheduleJobs(List<TriggerKey> triggerKeylist) throws SchedulerException{
        return scheduler.unscheduleJobs(triggerKeylist);
    }
    /**
     * 重新恢復觸發器相關的job任務 
     * @param triggerkey
     * @param trigger
     * @return
     * @throws SchedulerException
     */
    public  Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
    throws SchedulerException{
        return scheduler.rescheduleJob(triggerkey, trigger);
    }
    /**
     * 添加相關的job任務
     * @param jobdetail
     * @param flag
     * @throws SchedulerException
     */
    public  void addJob(JobDetail jobdetail, boolean flag)
            throws SchedulerException   {
        scheduler.addJob(jobdetail, flag);
    }

    /**
     * 刪除相關的job任務
     * @param jobkey
     * @return
     * @throws SchedulerException
     */
    public  boolean deleteJob(JobKey jobkey) throws SchedulerException{
        return scheduler.deleteJob(jobkey);
    }

    /**
     * 刪除相關的多個job任務
     * @param jobKeys
     * @return
     * @throws SchedulerException
     */
    public     boolean deleteJobs(List<JobKey> jobKeys)
    throws SchedulerException{
        return scheduler.deleteJobs(jobKeys);
    }
    /**
     * 
     * @param jobkey
     * @throws SchedulerException
     */
    public  void triggerJob(JobKey jobkey) throws SchedulerException    {
        scheduler.triggerJob(jobkey);
    }
    /**
     * 
     * @param jobkey
     * @param jobdatamap
     * @throws SchedulerException
     */
    public  void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
            throws SchedulerException   {
        scheduler.triggerJob(jobkey, jobdatamap);
    }
    /**
     * 停止一個job任務
     * @param jobkey
     * @throws SchedulerException
     */
    public  void pauseJob(JobKey jobkey) throws SchedulerException  {
        scheduler.pauseJob(jobkey);
    }
    /**
     * 停止多個job任務
     * @param groupmatcher
     * @throws SchedulerException
     */
    public  void pauseJobs(GroupMatcher<JobKey> groupmatcher)
            throws SchedulerException   {
        scheduler.pauseJobs(groupmatcher);
    }
    /**
     * 停止使用相關的觸發器
     * @param triggerkey
     * @throws SchedulerException
     */
    public  void pauseTrigger(TriggerKey triggerkey)
            throws SchedulerException   {
        scheduler.pauseTrigger(triggerkey);
    }

    public  void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
            throws SchedulerException   {
        scheduler.pauseTriggers(groupmatcher);
    }
    /**
     * 恢復相關的job任務
     * @param jobkey
     * @throws SchedulerException
     */
    public  void resumeJob(JobKey jobkey) throws SchedulerException {
        scheduler.pauseJob(jobkey);
    }

    public  void resumeJobs(GroupMatcher<JobKey> matcher)
            throws SchedulerException   {
        scheduler.resumeJobs(matcher);
    }

    public  void resumeTrigger(TriggerKey triggerkey)
            throws SchedulerException   {
        scheduler.resumeTrigger(triggerkey);
    }

    public  void resumeTriggers(GroupMatcher<TriggerKey>  groupmatcher)
            throws SchedulerException
    {
        scheduler.resumeTriggers(groupmatcher); 
    }
    /**
     * 暫停調度中所有的job任務
     * @throws SchedulerException
     */
    public  void pauseAll() throws SchedulerException
    {
        scheduler.pauseAll();
    }
    /**
     * 恢復調度中所有的job的任務
     * @throws SchedulerException
     */
    public  void resumeAll() throws SchedulerException
    {
        scheduler.resumeAll();
    }
}


創建一個Job任務:

package com.gbsoft.rpt.qrz;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 一個簡單的quartz調用job
 * @author 123
 *
 */
public class HelloJob implements Job {

    private static Logger _log = LoggerFactory.getLogger(HelloJob.class);

    public HelloJob() {
    }

    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        _log.info("Hello World! - " + new Date());
    }

}

創建觸發器和調用相關的Job

package com.gbsoft.rpt.qrz;

import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 一個簡單的測試quartz任務管理器測試類
 * @author 123
 *
 */
public class QuartzScheduleMain {


    /**
     * 
     * @throws Exception
     */
    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(QuartzScheduleMain.class);

        log.info("------- Initializing ----------------------");

        // First we must get a reference to a scheduler
        //從調度管理器中獲取調度對象
        Scheduler sched = QuartzScheduleMgr.getInstanceScheduler();
        log.info("------- Initialization Complete -----------");

        // computer a time that is on the next round minute
        Date runTime = evenMinuteDate(new Date());

        log.info("------- Scheduling Job  -------------------");

        // define the job and tie it to our HelloJob class
        //創建相關的job信息
        JobDetail job = newJob(HelloJob.class)
            .withIdentity("job1", "group1")
            .build();

        // Trigger the job to run on the next round minute
        //創建一個觸發器的名稱
        Trigger trigger = newTrigger()
            .withIdentity("trigger1", "group1")
            .startAt(runTime)
            .build();

        // Tell quartz to schedule the job using our trigger
        //設置調度相關的Job
        sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " will run at: " + runTime);  

        // Start up the scheduler (nothing can actually run until the 
        // scheduler has been started)
        //啟動調度任務
        sched.start();

        log.info("------- Started Scheduler -----------------");

        try {
            Thread.sleep(25L * 1000L); 
            // executing...
        } catch (Exception e) {
        }
        //暫時停止Job任務開始執行
        log.info("-------pauseJob.. -------------");
        sched.pauseJob(job.getKey());

        try {
            Thread.sleep(10L * 1000L); 
        } catch (Exception e) {
        }
        log.info("------- resumeJob... -------------");
        //恢復Job任務開始執行
        sched.resumeJob(job.getKey());
        try {
            Thread.sleep(10L * 1000L); 
            // executing...
        } catch (Exception e) {
        }


        // wait long enough so that the scheduler as an opportunity to 
        // run the job!
        log.info("------- Waiting 65 seconds... -------------");
        try {
            // wait 65 seconds to show job
            Thread.sleep(65L * 1000L); 
            // executing...
        } catch (Exception e) {
        }

        // shut down the scheduler
        log.info("------- Shutting Down ---------------------");
        sched.shutdown(true);
        log.info("------- Shutdown Complete -----------------");
    }

    public static void main(String[] args) throws Exception {

        QuartzScheduleMain example = new QuartzScheduleMain();
        example.run();

    }

}

官網地址:http://www.quartz-scheduler.org/documentation/quartz-2.1.x/quick-start

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!