quartz使用(一)

来源:互联网 发布:犀牛设计软件视频教程 编辑:程序博客网 时间:2024/04/28 00:35

使用quartz框架,开发定时任务,简单用法比较方便。写一个job,一个trigger,然后运行就OK了。例子以quartz-2.2.2的jar包


比如: 

package com.xsoft.job;


import java.util.Date;

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

/**
 * <p>
 * This is just a simple job that says "Hello" to the world.
 * </p>
 *
 * @author Bill Kratzer
 */
public class HelloJob implements Job {

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

    /**
     * <p>
     * Empty constructor for job initilization
     * </p>
     * <p>
     * Quartz requires a public empty constructor so that the
     * scheduler can instantiate the class whenever it needs.
     * </p>
     */
    public HelloJob() {
    }

    /**
     * <p>
     * Called by the <code>{@link org.quartz.Scheduler}</code> when a
     * <code>{@link org.quartz.Trigger}</code> fires that is associated with
     * the <code>Job</code>.
     * </p>
     *
     * @throws JobExecutionException
     *             if there is an exception while executing the job.
     */
    public void execute(JobExecutionContext context)
        throws JobExecutionException {

        // Say Hello to the World and display the date/time
        _log.info("@@Hello World!@@ ---- " + new Date());
    }

}


package com.xsoft.task;


import static org.quartz.CronScheduleBuilder.cronSchedule;
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.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Matcher;
import org.quartz.Scheduler;
import org.quartz.impl.matchers.KeyMatcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xsoft.core.quartz.QuartzScheduleMgr;
import com.xsoft.job.HelloJob;

public class QuartzSchedule {
 /**
     *
     * @throws Exception
     */
    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(QuartzSchedule.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("jobtest1", "grouptest1")
            .build();
        
        // Trigger the job to run on the next round minute
        //创建一个触发器的名称
        CronTrigger trigger =  newTrigger()
              .withIdentity("triggertest1", "grouptest1")
              .withSchedule(cronSchedule("0/20 * * * * ?"))
              .startNow()
              .build();
        
        //job 级别 listener
        Matcher<JobKey> matcher = KeyMatcher.keyEquals(job.getKey().jobKey("jobtest1","grouptest1"));
       
       // JobListener listener = new MyJobListener();
       // sched.getListenerManager().addJobListener(listener, matcher);
       
        // 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();
    }
 
    public static void main(String[] args) throws Exception {
     QuartzSchedule example = new QuartzSchedule();
        example.run();
    }
}



package com.xsoft.core.quartz;

import java.util.Date; 
import java.util.List; 
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; 

public class QuartzScheduleMgr {
 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(); 
    } 

}



写这样两个简单的类,就可以运行定时程序~~ 其中

CronTrigger 用于设置job的运行间隔时间,运行次数等信息。cronSchedule("0/20 * * * * ?") 可以参见cron表达式的写法。

QuartzScheduleMgr 这个类用于控制 job的暂时,删除,停止等功能。

0 0