Quartz 任务调度

21 篇文章 0 订阅

1.实现一个管理类 ,对计时的程序进行管理

[java]   view plain copy
  1. import  java.text.ParseException;  
  2. import  org.quartz.CronTrigger;  
  3. import  org.quartz.JobDetail;  
  4. import  org.quartz.Scheduler;  
  5. import  org.quartz.SchedulerException;  
  6. import  org.quartz.SchedulerFactory;  
  7. import  org.quartz.impl.StdSchedulerFactory;  
  8.   
  9. /**  
  10.  * 定时任务管理类  
  11.  */   
  12. public   class  QuartzManager {  
  13.     //SchedulerFactory 是创建定时任务的工厂   
  14.     private   static  SchedulerFactory gSchedulerFactory =  new  StdSchedulerFactory();  
  15.     private   static  String JOB_GROUP_NAME =  "EXTJWEB_JOBGROUP_NAME" ; //默认的任务组   
  16.     private   static  String TRIGGER_GROUP_NAME =  "EXTJWEB_TRIGGERGROUP_NAME" ; //默认计时器组   
  17.   
  18.     /**  
  19.      * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名  
  20.      *  
  21.      * @param jobName   任务名  
  22.      * @param jobClass  任务  
  23.      * @param time      时间设置,参考quartz说明文档  
  24.      * @throws SchedulerException  
  25.      * @throws ParseException  
  26.      */   
  27.     public   static   void  addJob(String jobName, String jobClass, String time) {  
  28.         try  {  
  29.             //获取一个Scheduler   
  30.             Scheduler sched = gSchedulerFactory.getScheduler();  
  31.             //创建一个任务  JobDetail   
  32.             /**  
  33.              * 参数1  任务名称   
  34.              * 参数2  任务组名  
  35.              * 参数3  任务执行的类  
  36.              */   
  37.             JobDetail jobDetail = new  JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass)); // 任务名,任务组,任务执行类   
  38.             // 触发器 CronTrigger   
  39.             /**  
  40.              * 参数1 任务名称    
  41.              * 参数2 触发器组名  
  42.              */   
  43.             CronTrigger trigger = new  CronTrigger(jobName, TRIGGER_GROUP_NAME); // 触发器名,触发器组   
  44.             trigger.setCronExpression(time);// 触发器时间设定   
  45.             //将 任务  和触发器 装进Scheduler   
  46.             sched.scheduleJob(jobDetail, trigger);  
  47.             // 启动   
  48.             if  (!sched.isShutdown()){  
  49.                 sched.start();  
  50.             }  
  51.         } catch  (Exception e) {  
  52.             e.printStackTrace();  
  53.             throw   new  RuntimeException(e);  
  54.         }  
  55.     }  
  56.   
  57.     /**  
  58.      * 添加一个定时任务  
  59.      *  
  60.      * @param jobName           任务名  
  61.      * @param jobGroupName      任务组名  
  62.      * @param triggerName       触发器名  
  63.      * @param triggerGroupName  触发器组名  
  64.      * @param jobClass          任务  
  65.      * @param time              时间设置,参考quartz说明文档  
  66.      * @throws SchedulerException  
  67.      * @throws ParseException  
  68.      */   
  69.     public   static   void  addJob(String jobName, String jobGroupName,  
  70.             String triggerName, String triggerGroupName, String jobClass, String time){  
  71.         try  {  
  72.             Scheduler sched = gSchedulerFactory.getScheduler();  
  73.             JobDetail jobDetail = new  JobDetail(jobName, jobGroupName, Class.forName(jobClass)); // 任务名,任务组,任务执行类   
  74.             // 触发器   
  75.             CronTrigger trigger = new  CronTrigger(triggerName, triggerGroupName); // 触发器名,触发器组   
  76.             trigger.setCronExpression(time);// 触发器时间设定   
  77.             sched.scheduleJob(jobDetail, trigger);  
  78.         } catch  (Exception e) {  
  79.             e.printStackTrace();  
  80.             throw   new  RuntimeException(e);  
  81.         }  
  82.     }  
  83.   
  84.     /**  
  85.      * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)  
  86.      *  
  87.      * @param jobName  
  88.      * @param time  
  89.      */   
  90.     @SuppressWarnings ( "unchecked" )  
  91.     public   static   void  modifyJobTime(String jobName, String time) {  
  92.         try  {  
  93.             Scheduler sched = gSchedulerFactory.getScheduler();  
  94.             CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName, TRIGGER_GROUP_NAME);  
  95.             if (trigger ==  null ) {  
  96.                 return ;  
  97.             }  
  98.             String oldTime = trigger.getCronExpression();  
  99.             if  (!oldTime.equalsIgnoreCase(time)) {  
  100.                 JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME);  
  101.                 Class objJobClass = jobDetail.getJobClass();  
  102.                 String jobClass = objJobClass.getName();  
  103.                 removeJob(jobName);  
  104.   
  105.                 addJob(jobName, jobClass, time);  
  106.             }  
  107.         } catch  (Exception e) {  
  108.             e.printStackTrace();  
  109.             throw   new  RuntimeException(e);  
  110.         }  
  111.     }  
  112.   
  113.     /**  
  114.      * 修改一个任务的触发时间  
  115.      *  
  116.      * @param triggerName  
  117.      * @param triggerGroupName  
  118.      * @param time  
  119.      */   
  120.     public   static   void  modifyJobTime(String triggerName,  
  121.             String triggerGroupName, String time) {  
  122.         try  {  
  123.             Scheduler sched = gSchedulerFactory.getScheduler();  
  124.             CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName);  
  125.             if (trigger ==  null ) {  
  126.                 return ;  
  127.             }  
  128.             String oldTime = trigger.getCronExpression();  
  129.             if  (!oldTime.equalsIgnoreCase(time)) {  
  130.                 CronTrigger ct = (CronTrigger) trigger;  
  131.                 // 修改时间   
  132.                 ct.setCronExpression(time);  
  133.                 // 重启触发器   
  134.                 sched.resumeTrigger(triggerName, triggerGroupName);  
  135.             }  
  136.         } catch  (Exception e) {  
  137.             e.printStackTrace();  
  138.             throw   new  RuntimeException(e);  
  139.         }  
  140.     }  
  141.   
  142.     /**  
  143.      * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)  
  144.      *  
  145.      * @param jobName  
  146.      */   
  147.     public   static   void  removeJob(String jobName) {  
  148.         try  {  
  149.             Scheduler sched = gSchedulerFactory.getScheduler();  
  150.             sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器   
  151.             sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器   
  152.             sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务   
  153.         } catch  (Exception e) {  
  154.             e.printStackTrace();  
  155.             throw   new  RuntimeException(e);  
  156.         }  
  157.     }  
  158.   
  159.     /**  
  160.      * 移除一个任务  
  161.      *  
  162.      * @param jobName  
  163.      * @param jobGroupName  
  164.      * @param triggerName  
  165.      * @param triggerGroupName  
  166.      */   
  167.     public   static   void  removeJob(String jobName, String jobGroupName,  
  168.             String triggerName, String triggerGroupName) {  
  169.         try  {  
  170.             Scheduler sched = gSchedulerFactory.getScheduler();  
  171.             sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器   
  172.             sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器   
  173.             sched.deleteJob(jobName, jobGroupName);// 删除任务   
  174.         } catch  (Exception e) {  
  175.             e.printStackTrace();  
  176.             throw   new  RuntimeException(e);  
  177.         }  
  178.     }  
  179.   
  180.     /**  
  181.      * 启动所有定时任务  
  182.      */   
  183.     public   static   void  startJobs() {  
  184.         try  {  
  185.             Scheduler sched = gSchedulerFactory.getScheduler();  
  186.             sched.start();  
  187.         } catch  (Exception e) {  
  188.             e.printStackTrace();  
  189.             throw   new  RuntimeException(e);  
  190.         }  
  191.     }  
  192.   
  193.     /**  
  194.      * 关闭所有定时任务  
  195.      */   
  196.     public   static   void  shutdownJobs() {  
  197.         try  {  
  198.             Scheduler sched = gSchedulerFactory.getScheduler();  
  199.             if (!sched.isShutdown()) {  
  200.                 sched.shutdown();  
  201.             }  
  202.         } catch  (Exception e) {  
  203.             e.printStackTrace();  
  204.             throw   new  RuntimeException(e);  
  205.         }  
  206.     }  
  207. }  

2.供定时程序调用的接口

[java]   view plain copy
  1. import  org.quartz.Job;  
  2.   
  3. /**  
  4.  *   
  5.  * 供需要定时的程序调用  
  6.  */   
  7. public   interface  InitiativeCollector  extends  Job {  
  8.           
  9.     /**  
  10.      * 获得Job定时时间  
  11.      * ----------------------------  
  12.      * 【位置说明】:  
  13.      *  1 - 秒(0–59)  
  14.      *  2 - 分(0–59)  
  15.      *  3 - 时(0–23)  
  16.      *  4 - 日(1–31)  
  17.      *  5 - 月(1–12)  
  18.      *  6 - 星期(SUN–SAT or 1–7)  
  19.      *  7 - 年(可选, 1970–2099)  
  20.      *  --------------------------------  
  21.      *  【符号说明】  
  22.      *  0 0 12 * * ?---------------在每天中午12:00触发   
  23.      *  0 15 10 ? * *---------------每天上午10:15 触发   
  24.      *  0 15 10 * * ?---------------每天上午10:15 触发   
  25.      *  0 15 10 * * ? *---------------每天上午10:15 触发   
  26.      *  0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 触发   
  27.      *  0 * 14 * * ?---------------每天在下午2:00至2:59之间每分钟触发一次   
  28.      *  0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次   
  29.      *  0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次   
  30.      *  0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次   
  31.      *  0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44时触发   
  32.      *  0 15 10 ? * MON-FRI---------------从星期一至星期五的每天上午10:15触发   
  33.      *  0 15 10 15 * ?---------------在每个月的每15天的上午10:15触发   
  34.      *  0 15 10 L * ?---------------在每个月的最后一天的上午10:15触发   
  35.      *  0 15 10 ? * 6L---------------在每个月的最后一个星期五的上午10:15触发   
  36.      *  0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发   
  37.      *  0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发   
  38.      *  0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发   
  39.      *  0 11 11 11 11 ?---------------在每个11月11日的上午11:11时触发  
  40.      * @return  
  41.      */   
  42.     String getTimer();  
  43.   
  44. }  

3.需要调用时只需要实现接口传入所需启动的时间即可 和复写 Job中的execute()方法执行所需的操作 。

[java]   view plain copy
  1. import  org.quartz.JobExecutionContext;  
  2. import  org.quartz.JobExecutionException;  
  3.   
  4. public   class  Collector  implements  InitiativeCollector {  
  5.   
  6.     @Override   
  7.     public  String getTimer() {  
  8.         //每周日的晚上23:30转上周的周统计数据   
  9.         return   "0 30 23 ? * SUN" ;  
  10.     }  
  11.   
  12.     @Override   
  13.     public   void  execute(JobExecutionContext arg0)  throws  JobExecutionException {  
  14.     <span style="white-space:pre" >  </span> // 执行操作   
  15.     }     
  16.       
  17.   
  18. }  

4.调用addJob

[java]   view plain copy
  1. void  addJob(String name,InitiativeCollector collector){  
  2. <span style="white-space:pre" >      </span>QuartzManager.addJob(name, collector.getClass().getName(), collector.getTimer());  
  3. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值