Quartz使用 在程序中启停定时器

时间:2014-02-26 05:59:19   收藏:0   阅读:333

转自:http://www.blogjava.net/fatbear/archive/2008/10/08/233158.html 

新需求:用程序实现定时器的停、起。下面是个例子

package wf.job;

import java.text.ParseException;

import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzManager {
	private static SchedulerFactory sf = new StdSchedulerFactory(); 
	   private static String JOB_GROUP_NAME = "group1"; 
	   private static String TRIGGER_GROUP_NAME = "trigger1"; 
	  
	   
	   /** *//** 
	    *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 
	    * @param jobName 任务名 
	    * @param job     任务 
	    * @param time    时间设置,参考quartz说明文档 
	    * @throws SchedulerException 
	    * @throws ParseException 
	    */ 
	   public static void addJob(String jobName,Job job,String time) 
	                               throws SchedulerException, ParseException{ 
	       Scheduler sched = sf.getScheduler(); 
	       JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类 
	       //触发器 
	       CronTrigger  trigger = 
	            new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组 
	       trigger.setCronExpression(time);//触发器时间设定 
	       sched.scheduleJob(jobDetail,trigger); 
	       //启动 
	       if(!sched.isShutdown()) 
	          sched.start(); 
	   } 
	   
	   /** *//** 
	    * 添加一个定时任务 
	    * @param jobName 任务名 
	    * @param jobGroupName 任务组名 
	    * @param triggerName  触发器名 
	    * @param triggerGroupName 触发器组名 
	    * @param job     任务 
	    * @param time    时间设置,参考quartz说明文档 
	    * @throws SchedulerException 
	    * @throws ParseException 
	    */ 
	   public static void addJob(String jobName,String jobGroupName, 
	                             String triggerName,String triggerGroupName, 
	                             Job job,String time) 
	                               throws SchedulerException, ParseException{ 
	       Scheduler sched = sf.getScheduler(); 
	       JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类 
	       //触发器 
	       CronTrigger  trigger = 
	            new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组 
	       trigger.setCronExpression(time);//触发器时间设定 
	       sched.scheduleJob(jobDetail,trigger); 
	       if(!sched.isShutdown()) 
	          sched.start(); 
	   } 
	   
	   /** *//** 
	    * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 
	    * @param jobName 
	    * @param time 
	    * @throws SchedulerException 
	    * @throws ParseException 
	    */ 
	   public static void modifyJobTime(String jobName,String time) 
	                                  throws SchedulerException, ParseException{ 
	       Scheduler sched = sf.getScheduler(); 
	       Trigger trigger =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME); 
	       if(trigger != null){ 
	           CronTrigger  ct = (CronTrigger)trigger; 
	           ct.setCronExpression(time); 
	           sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME); 
	       } 
	   } 
	   
	   /** *//** 
	    * 修改一个任务的触发时间 
	    * @param triggerName 
	    * @param triggerGroupName 
	    * @param time 
	    * @throws SchedulerException 
	    * @throws ParseException 
	    */ 
	   public static void modifyJobTime(String triggerName,String triggerGroupName, 
	                                    String time) 
	                                  throws SchedulerException, ParseException{ 
	       Scheduler sched = sf.getScheduler(); 
	       Trigger trigger =  sched.getTrigger(triggerName,triggerGroupName); 
	       if(trigger != null){ 
	           CronTrigger  ct = (CronTrigger)trigger; 
	           //修改时间 
	           ct.setCronExpression(time); 
	           //重启触发器 
	           sched.resumeTrigger(triggerName,triggerGroupName); 
	       } 
	   } 
	   
	   /** *//** 
	    * 移除一个任务(使用默认的任务组名,触发器名,触发器组名) 
	    * @param jobName 
	    * @throws SchedulerException 
	    */ 
	   public static void removeJob(String jobName) 
	                               throws SchedulerException{ 
	       Scheduler sched = sf.getScheduler(); 
	       sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器 
	       sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器 
	       sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务 
	   } 
	   
	   /** *//** 
	    * 移除一个任务 
	    * @param jobName 
	    * @param jobGroupName 
	    * @param triggerName 
	    * @param triggerGroupName 
	    * @throws SchedulerException 
	    */ 
	   public static void removeJob(String jobName,String jobGroupName, 
	                                String triggerName,String triggerGroupName) 
	                               throws SchedulerException{ 
	       Scheduler sched = sf.getScheduler(); 
	       sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器 
	       sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器 
	       sched.deleteJob(jobName,jobGroupName);//删除任务 
	   } 
	}


下面是调用的类:

public class QuartzTest {
	/** *//**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestJob job = new TestJob();
        String job_name ="11";
        try {
            System.out.println("【系统启动】");
            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");
            
            Thread.sleep(10000);
            System.out.println("【修改时间】");
            QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");
            Thread.sleep(20000);
            System.out.println("【移除定时】");
            QuartzManager.removeJob(job_name);
            Thread.sleep(10000);
            
            System.out.println("/n 【添加定时任务】");
            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");
            
        }  catch (Exception e) {
            e.printStackTrace();
        }
    }
}
public class TestJob implements Job{

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		System.out.println("★★★★★★★★★★★");
	}

}

bubuko.com,布布扣

原文:http://blog.csdn.net/liwf_/article/details/19917077

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!