`
fackyou200
  • 浏览: 309565 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

Quartz 任务调度

 
阅读更多

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. }  


分享到:
评论

相关推荐

    .net Quartz 任务调度平台源码

    《.NET Quartz 任务调度平台源码解析与应用》 .NET Quartz 是一款强大的任务调度框架,它为.NET开发者提供了一种高效、灵活的方式来安排和执行周期性任务。Quartz.NET 是开源项目Quartz的.NET版本,它允许开发人员...

    Quartz任务调度器

    Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...

    C#基于Quartz任务调度系统

    **C#基于Quartz任务调度系统** 在软件开发中,任务调度是一项重要的功能,它允许开发者安排任务在特定时间执行,比如数据同步、定时备份、报告生成等。Quartz是一款强大的开源任务调度库,广泛应用于Java和.NET生态...

    quartz任务调度使用手册

    Quartz任务调度是一款开源的Java定时任务框架,广泛应用于企业级应用系统中,用于执行周期性的后台任务。这款工具提供了一种灵活的方式来安排和管理任务,使得开发者无需在业务代码中处理时间相关的逻辑,而是通过...

    quartz任务调度框架简单实用小demo

    本“quartz任务调度框架简单实用小demo”旨在帮助开发者快速理解和应用Quartz。 1. **Quartz基本概念** - **Job**: 任务的基本单元,代表一个需要执行的工作。 - **Trigger**: 触发器,决定Job何时被执行。 - **...

    Quartz任务调度管理

    ### Quartz任务调度管理 #### 一、任务调度基础概念 任务调度是指系统按照预先设定的时间规则来自动执行特定任务的功能。这种机制广泛应用于各种场景,例如数据备份、定期检查资源状态、发送邮件通知等。 ##### ...

    基于Spring Boot的Quartz任务调度系统.zip

    基于Spring Boot的Quartz任务调度系统 项目概述 本项目是一个基于Spring Boot和Quartz的任务调度系统,旨在提供灵活的任务管理和调度功能。系统支持多种任务类型,包括Cron表达式任务和单次时间任务,并提供了丰富...

    spring+mybatis+quartz任务调度实例和spring+quartz任务调度实例

    里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例

    spring+quartz任务调度代码版

    本项目"spring+quartz任务调度代码版"显然是一个结合了这两者的实践案例,旨在展示如何在Spring环境下集成和使用Quartz进行任务调度。 Spring框架是一个开源的应用框架,它提供了丰富的功能,包括依赖注入、AOP...

    Spring quartz任务调度

    标题“Spring quartz任务调度”指的是在Java开发中利用Spring框架集成Quartz库来实现应用程序的任务调度功能。Quartz是一款开源的作业调度框架,它允许开发者安排任务在特定时间执行,而Spring框架则提供了与Quartz...

    Quartz任务调度-详细教程

    Quartz任务调度--详细教程,讲的非常详细

    spring quartz 任务调度

    Spring框架作为一个全面的企业级应用开发解决方案,提供了强大的任务调度支持,而Quartz则是一个流行的开源作业调度库,能够与Spring很好地集成。现在,我们就来深入探讨"spring quartz 任务调度"这一主题。 首先,...

    Quartz任务调度框架教程中文版

    Quartz任务调度框架教程中文版 chm格式

    Spring Quartz 任务调度

    **Spring Quartz 任务调度** Spring Quartz 是一个基于 Java 的任务调度框架,它允许开发者定义定时任务并在应用程序中灵活地调度这些任务。这个框架是 Spring 和 Quartz Scheduler 的集成,提供了与 Spring 框架的...

    quartz 任务调度可运行例子

    总的来说,这个 Quartz 任务调度的运行示例为你提供了一个动手实践的机会,加深对 Quartz 工作原理的理解。通过学习和应用这个示例,你将能够自如地在 Java 应用程序中实现复杂的定时任务调度。

    简单的Quartz任务调度例子

    本篇将通过一个简单的Quartz任务调度实例,来深入理解其核心概念和用法。 首先,我们需要了解Quartz的主要组件: 1. **Job**:工作接口,代表一个具体的任务,实现`org.quartz.Job`接口,定义了`execute...

    quartz任务调度

    Quartz任务调度是一种广泛使用的开源任务调度框架,它允许开发者创建、调度和管理定时任务。初学者通过学习Quartz,可以提升其编程技能,尤其是在Java应用程序中实现复杂定时任务的能力。 1. **Quartz框架**: - ...

    Quartz任务调度快速入门

    ### Quartz任务调度快速入门知识点详解 #### 一、Quartz框架简介 Quartz是一个功能强大的开源作业调度框架,被广泛应用于Java应用中实现任务的定时调度。Quartz通过对任务调度领域的核心问题进行高度抽象,提炼出...

    Quartz任务调度框架和log4j各种文档集合

    Quartz任务调度框架是Java开发中的一个强大工具,用于在应用程序中实现定时任务的自动执行。它是一个开源的作业调度库,可以与Java应用程序无缝集成,允许开发人员定义和调度复杂的作业执行计划。Quartz提供了丰富的...

Global site tag (gtag.js) - Google Analytics