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

来源:互联网 发布:儿童发音矫正软件 编辑:程序博客网 时间:2024/05/19 01:11

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

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


但是在我的项目中Quartz版本是用maven下的新版本,发现先前的例子中的方法不能直接用了,下面是之后有做的修改的:

如果用的quartz版本是2.2.X 最新的需要做如下修改:

因为新版本把好多类变成了接口,不能直接实例化,需要借助其他的类来实例化;如下:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. @Controller  
  2. @RequestMapping(value = "/etos2/bss")  
  3. public class BillJobStart {  
  4.       
  5.     @RequestMapping(value = "/billJobStart")  
  6.     public void jobStart() {  
  7.         addJob(BillJobConstant.JOB_NAME,"0/2 * * * * ?");  
  8.     }  
  9.   
  10.     public static void addJob(String jobName,String time){   
  11.         try {  
  12.             Scheduler sched = BillJobConstant.sf.getScheduler();  
  13.             JobDetail jobDetail = JobBuilder.newJob(JobT.class).withIdentity(jobName, BillJobConstant.JOB_GROUP_NAME).build();  
  14.             CronExpression cronExpression =new CronExpression(time);  
  15.             CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(BillJobConstant.TRIGGER_GROUP_NAME).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();  
  16.             sched.scheduleJob(jobDetail,trigger);   
  17.             //启动   
  18.             if(!sched.isShutdown())   
  19.                sched.start();  
  20.         } catch (SchedulerException e) {  
  21.             e.printStackTrace();  
  22.         } catch (ParseException e) {  
  23.             e.printStackTrace();  
  24.         }   
  25.     }  
  26.       
  27.     public static void modifyTime(String time){  
  28.         try {  
  29.             Scheduler sched =  BillJobConstant.sf.getScheduler();  
  30.             TriggerKey key = new TriggerKey( BillJobConstant.TRIGGER_GROUP_NAME);  
  31.             CronExpression cronExpression =new CronExpression(time);  
  32.             Trigger trigger = sched.getTrigger(key);  
  33.             CronTrigger cron = (CronTrigger)trigger;  
  34.             cron.getTriggerBuilder().withIdentity(BillJobConstant.TRIGGER_GROUP_NAME).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();  
  35.             sched.resumeTrigger(key);  
  36.               
  37.         } catch (SchedulerException e) {  
  38.             e.printStackTrace();  
  39.         } catch (ParseException e) {  
  40.             // TODO Auto-generated catch block  
  41.             e.printStackTrace();  
  42.         }  
  43.     }  
  44.       
  45.     public static void stopJob()throws SchedulerException, ParseException{   
  46.         Scheduler sched =  BillJobConstant.sf.getScheduler();  
  47.         TriggerKey key = new TriggerKey( BillJobConstant.TRIGGER_GROUP_NAME);  
  48.         sched.pauseTrigger(key);//停止触发器  
  49.     }   
  50.     public static void main(String[] args) {  
  51.         try {  
  52.             addJob(BillJobConstant.JOB_NAME,"0/5 * * * * ?");  
  53.             Thread.sleep(10000);   
  54.             stopJob();  
  55.             Thread.sleep(10000);   
  56.             modifyTime("0/1 * * * * ?");  
  57.         } catch (InterruptedException e) {  
  58.             // TODO Auto-generated catch block  
  59.             e.printStackTrace();  
  60.         } catch (SchedulerException e) {  
  61.             // TODO Auto-generated catch block  
  62.             e.printStackTrace();  
  63.         } catch (ParseException e) {  
  64.             // TODO Auto-generated catch block  
  65.             e.printStackTrace();  
  66.         }  
  67.     }  
  68. }  





[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package wf.job;  
  2.   
  3. import java.text.ParseException;  
  4.   
  5. import org.quartz.CronTrigger;  
  6. import org.quartz.Job;  
  7. import org.quartz.JobDetail;  
  8. import org.quartz.Scheduler;  
  9. import org.quartz.SchedulerException;  
  10. import org.quartz.SchedulerFactory;  
  11. import org.quartz.Trigger;  
  12. import org.quartz.impl.StdSchedulerFactory;  
  13.   
  14. public class QuartzManager {  
  15.     private static SchedulerFactory sf = new StdSchedulerFactory();   
  16.        private static String JOB_GROUP_NAME = "group1";   
  17.        private static String TRIGGER_GROUP_NAME = "trigger1";   
  18.         
  19.          
  20.        /** *//**  
  21.         *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名  
  22.         * @param jobName 任务名  
  23.         * @param job     任务  
  24.         * @param time    时间设置,参考quartz说明文档  
  25.         * @throws SchedulerException  
  26.         * @throws ParseException  
  27.         */   
  28.        public static void addJob(String jobName,Job job,String time)   
  29.                                    throws SchedulerException, ParseException{   
  30.            Scheduler sched = sf.getScheduler();   
  31.            JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类   
  32.            //触发器   
  33.            CronTrigger  trigger =   
  34.                 new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组   
  35.            trigger.setCronExpression(time);//触发器时间设定   
  36.            sched.scheduleJob(jobDetail,trigger);   
  37.            //启动   
  38.            if(!sched.isShutdown())   
  39.               sched.start();   
  40.        }   
  41.          
  42.        /** *//**  
  43.         * 添加一个定时任务  
  44.         * @param jobName 任务名  
  45.         * @param jobGroupName 任务组名  
  46.         * @param triggerName  触发器名  
  47.         * @param triggerGroupName 触发器组名  
  48.         * @param job     任务  
  49.         * @param time    时间设置,参考quartz说明文档  
  50.         * @throws SchedulerException  
  51.         * @throws ParseException  
  52.         */   
  53.        public static void addJob(String jobName,String jobGroupName,   
  54.                                  String triggerName,String triggerGroupName,   
  55.                                  Job job,String time)   
  56.                                    throws SchedulerException, ParseException{   
  57.            Scheduler sched = sf.getScheduler();   
  58.            JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类   
  59.            //触发器   
  60.            CronTrigger  trigger =   
  61.                 new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组   
  62.            trigger.setCronExpression(time);//触发器时间设定   
  63.            sched.scheduleJob(jobDetail,trigger);   
  64.            if(!sched.isShutdown())   
  65.               sched.start();   
  66.        }   
  67.          
  68.        /** *//**  
  69.         * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)  
  70.         * @param jobName  
  71.         * @param time  
  72.         * @throws SchedulerException  
  73.         * @throws ParseException  
  74.         */   
  75.        public static void modifyJobTime(String jobName,String time)   
  76.                                       throws SchedulerException, ParseException{   
  77.            Scheduler sched = sf.getScheduler();   
  78.            Trigger trigger =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME);   
  79.            if(trigger != null){   
  80.                CronTrigger  ct = (CronTrigger)trigger;   
  81.                ct.setCronExpression(time);   
  82.                sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);   
  83.            }   
  84.        }   
  85.          
  86.        /** *//**  
  87.         * 修改一个任务的触发时间  
  88.         * @param triggerName  
  89.         * @param triggerGroupName  
  90.         * @param time  
  91.         * @throws SchedulerException  
  92.         * @throws ParseException  
  93.         */   
  94.        public static void modifyJobTime(String triggerName,String triggerGroupName,   
  95.                                         String time)   
  96.                                       throws SchedulerException, ParseException{   
  97.            Scheduler sched = sf.getScheduler();   
  98.            Trigger trigger =  sched.getTrigger(triggerName,triggerGroupName);   
  99.            if(trigger != null){   
  100.                CronTrigger  ct = (CronTrigger)trigger;   
  101.                //修改时间   
  102.                ct.setCronExpression(time);   
  103.                //重启触发器   
  104.                sched.resumeTrigger(triggerName,triggerGroupName);   
  105.            }   
  106.        }   
  107.          
  108.        /** *//**  
  109.         * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)  
  110.         * @param jobName  
  111.         * @throws SchedulerException  
  112.         */   
  113.        public static void removeJob(String jobName)   
  114.                                    throws SchedulerException{   
  115.            Scheduler sched = sf.getScheduler();   
  116.            sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器   
  117.            sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器   
  118.            sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务   
  119.        }   
  120.          
  121.        /** *//**  
  122.         * 移除一个任务  
  123.         * @param jobName  
  124.         * @param jobGroupName  
  125.         * @param triggerName  
  126.         * @param triggerGroupName  
  127.         * @throws SchedulerException  
  128.         */   
  129.        public static void removeJob(String jobName,String jobGroupName,   
  130.                                     String triggerName,String triggerGroupName)   
  131.                                    throws SchedulerException{   
  132.            Scheduler sched = sf.getScheduler();   
  133.            sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器   
  134.            sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器   
  135.            sched.deleteJob(jobName,jobGroupName);//删除任务   
  136.        }   
  137.     }  


下面是调用的类:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class QuartzTest {  
  2.     /** *//** 
  3.      * @param args 
  4.      */  
  5.     public static void main(String[] args) {  
  6.         // TODO Auto-generated method stub  
  7.         TestJob job = new TestJob();  
  8.         String job_name ="11";  
  9.         try {  
  10.             System.out.println("【系统启动】");  
  11.             QuartzManager.addJob(job_name,job,"0/5 * * * * ?");  
  12.               
  13.             Thread.sleep(10000);  
  14.             System.out.println("【修改时间】");  
  15.             QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");  
  16.             Thread.sleep(20000);  
  17.             System.out.println("【移除定时】");  
  18.             QuartzManager.removeJob(job_name);  
  19.             Thread.sleep(10000);  
  20.               
  21.             System.out.println("/n 【添加定时任务】");  
  22.             QuartzManager.addJob(job_name,job,"0/5 * * * * ?");  
  23.               
  24.         }  catch (Exception e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  
  28. }  
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class TestJob implements Job{  
  2.   
  3.     @Override  
  4.     public void execute(JobExecutionContext arg0) throws JobExecutionException {  
  5.         // TODO Auto-generated method stub  
  6.         System.out.println("★★★★★★★★★★★");  
  7.     }  
  8.   
  9. }  
0 0
原创粉丝点击