`

定时器quartz的应用

阅读更多

用quartz可以实现web或非web模式的定时器

1、配置文件

quartz_job.xml
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"  
  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.         overwrite-existing-jobs="true">  
  5.        
  6.     <job>  
  7.         <job-detail>  
  8.             <name>yayaittname>  
  9.             <group>CRAWLER_JOB_GROUPgroup>  
  10.   
  11.             <description>send task per daydescription>  
  12.             <job-class>com.yahaitt.quartz.QuartzSystemjob-class>  
  13.   
  14.             <job-data-map allows-transient-data="true">  
  15.                <entry>  
  16.                     <key>usernamekey>  
  17.                     <value>wujinlivalue>  
  18.                 entry>  
  19.                 <entry>  
  20.                     <key>passwordkey>  
  21.                     <value>mahaibovalue>  
  22.   
  23.                 entry>  
  24.             job-data-map>  
  25.         job-detail>  
  26.         <trigger>  
  27.             <cron>  
  28.                 <name>hourTaskJob-triggername>  
  29.                 <group>CRAWLER_TRIGGER_GROUPgroup>  
  30.                 <job-name>yayaittjob-name>  
  31.                 <job-group>CRAWLER_JOB_GROUPjob-group>  
  32.   
  33.   
  34.                 <cron-expression>1/12 * * * * ?cron-expression>  
  35.   
  36.             cron>  
  37.         trigger>  
  38.     job>  
  39.   
  40.        
  41.        
  42.        
  43.      
  44. quartz>  

该定时器实现了每12秒触发类com.yahaitt.quartz.QuartzSystem的execute函数,并通过java-data-map标签来实现参数的传递,如果不需要传递参数,可以将整个java-data-map标签去除。

需要注意的是job-detail与trigger中各子标签间的关系,比如trigger中job-name和job-group要与job-detail中的name和group对应。

可以通过在quartz标签中添加多个job来实现多个定时器的管理。

2、定义org.quartz.Job接口的实现类

QuartzSystem.java
  1. package com.yahaitt.quartz;   
  2.   
  3. import org.quartz.Job;   
  4. import org.quartz.JobExecutionContext;   
  5. import org.quartz.JobExecutionException;   
  6.   
  7. public class QuartzSystem implements Job {   
  8.   
  9.     public void execute(JobExecutionContext context) throws JobExecutionException {   
  10.         // TODO Auto-generated method stub   
  11.            
  12.         String username = context.getJobDetail().getJobDataMap().getString("username");   
  13.         String password = context.getJobDetail().getJobDataMap().getString("password");   
  14.         System.out.println("username:" + username);   
  15.         System.out.println("password:" + password);   
  16.     }   
  17.   
  18. }   

通过调用JobExecutionContext 的getJobDetail().getJobDataMap().getString(String paramname)来取得配置文件中定义的参数的值。

当定时器触发时,将执行该类的execute函数。

3、设置监听器

TaskScheduler.java
  1. package com.yahaitt.quartz;   
  2.   
  3. import java.util.Properties;   
  4.   
  5. import org.apache.log4j.Logger;   
  6. import org.quartz.Scheduler;   
  7. import org.quartz.SchedulerException;   
  8. import org.quartz.SchedulerFactory;   
  9. import org.quartz.impl.StdSchedulerFactory;   
  10. import org.quartz.xml.JobSchedulingDataProcessor;   
  11.   
  12.   
  13. public class TaskScheduler {   
  14.     // Logger   
  15.     private static Logger logger = Logger.getLogger(TaskScheduler.class);   
  16.        
  17.     private static Scheduler scheduler;   
  18.        
  19.     private String jobsConfigFile = "quartz-jobs.xml";   
  20.        
  21.     public TaskScheduler() {   
  22.         initScheduler();   
  23.     }   
  24.        
  25.     /**  
  26.      *   
  27.      * @param fileName  
  28.      * @return  
  29.      */  
  30.     public void initScheduler() {   
  31.         try {   
  32.             StdSchedulerFactory factory = new StdSchedulerFactory();   
  33.             //   
  34.             Properties properties = new Properties();   
  35.             properties.put("org.quartz.scheduler.instanceName","DefaultQuartzScheduler");   
  36.             properties.put("org.quartz.scheduler.rmi.export","false");   
  37.             properties.put("org.quartz.scheduler.rmi.proxy","false");   
  38.             properties.put("org.quartz.scheduler.wrapJobExecutionInUserTransaction","false");   
  39.             properties.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");   
  40.             properties.put("org.quartz.threadPool.threadCount","20");   
  41.             properties.put("org.quartz.threadPool.threadPriority","5");   
  42.             properties.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread","true");   
  43.             properties.put("org.quartz.jobStore.misfireThreshold","60000");   
  44.             properties.put("org.quartz.jobStore.class","org.quartz.simpl.RAMJobStore");   
  45. //          org.quartz.plugin.jobInitializer.validating = false   
  46. //          org.quartz.plugin.jobInitializer.validatingSchema = false   
  47. //          org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin   
  48. //          org.quartz.plugin.jobInitializer.fileName = quartz-jobs.xml   
  49. //          org.quartz.plugin.jobInitializer.overWriteExistingJobs = false   
  50. //          org.quartz.plugin.jobInitializer.failOnFileNotFound = true    
  51.             factory.initialize(properties);   
  52.             SchedulerFactory sf = (StdSchedulerFactory)factory;   
  53.             scheduler = sf.getScheduler();   
  54.             //Placing a Scheduler in Stand-by Mode   
  55.             //scheduler.standby();   
  56.         } catch (SchedulerException e) {   
  57.             e.printStackTrace();   
  58.             logger.error(e);   
  59.         }   
  60.     }   
  61.        
  62.     /**  
  63.      * 从指定的任务配置文件中初始化计划任务  
  64.      * @param jobsConfig  
  65.      * @throws Exception  
  66.      */  
  67.     public void initJobs(String jobsConfig) throws Exception {   
  68.         //   
  69.         this.jobsConfigFile = jobsConfig;   
  70.         //   
  71.         JobSchedulingDataProcessor xmlProcessor = new JobSchedulingDataProcessor();   
  72.         //the last parameter here (the boolean one)is for overwriting existing jobs   
  73.         xmlProcessor.processFileAndScheduleJobs(jobsConfigFile, scheduler, true);   
  74.     }   
  75.        
  76.     /**  
  77.      * 开启计划任务  
  78.      * @throws SchedulerException  
  79.      */  
  80.     public void startScheduler() throws SchedulerException {   
  81.         //   Scheduler will not execute jobs until it has been started (though they can be scheduled before start())    
  82.         scheduler.start();   
  83.     }   
  84.        
  85.     /**  
  86.      * 停止计划任务  
  87.      * @throws SchedulerException  
  88.      */  
  89.     public void shutdownScheduler() throws SchedulerException {   
  90.         scheduler.shutdown();   
  91.     }   
  92.        
  93.     /**  
  94.      * @param args  
  95.      */  
  96.     public static void main(String[] args) {   
  97.         String jobsConfigfile = "E:/workspace/crawler/conf/quartz_job.xml";   
  98.         TaskScheduler scheduler = new TaskScheduler();   
  99.         try {   
  100.             scheduler.initJobs(jobsConfigfile);   
  101.             scheduler.startScheduler();   
  102.         } catch (Exception e) {   
  103.             e.printStackTrace();   
  104.         }   
  105.   
  106.     }   
  107.   
  108. }   
分享到:
评论
2 楼 zhangguodong_ 2012-06-08  
1 楼 zhangguodong_ 2012-06-08  

相关推荐

    Quartz定时器web应用

    quartz的web整合简单小例子,比较适合做一些方便的工作,定时器可以轻松搞定。

    Java定时器 quartz jar包

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成...

    Quartz.net定时器

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的...

    JAVA定时任务-Quartz应用Demo

    0 0 12 * * ? 每天12点运行 0 15 10 ? * * 每天10:15运行 0 15 10 * * ? 每天10:15运行 0 15 10 * * ? * 每天10:15运行 0 15 10 * * ? 2008 在2008年的每天10:15运行 0 * 14 * * ? 每天14点到15点之间每分钟运行一...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    NULL 博文链接:https://medbricom.iteye.com/blog/1782765

    spring整合java quartz实现动态定时任务的前台网页配置与管理

    在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...

    Quartz-2.2.3-distribution

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成...

    SPRING 定时器的使用

    并非应用系统中发生的所有事情都是由用户的动作引起的。...在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:

    quartz-all-1.6.1.jar

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,...

    spring 定时器

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来...

    java 定时器任务timer 随tomcat启动而启动 同步启动

    我们通常写的timer都是用main方法写的定时器,但同样我们也需要根据服务器启动后定时器也启动的 定时执行任务。不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台...

    Quartz_net框架及官方开发文档

    作业调度框架插件及帮助文档,Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行...

    spring-quartz:使用三种方式实现quartz定时任务

    SpringQuartz定时任务Use technologyspring.version 4.3.16quartz.version 2.3.0CN1.RAMJobStore实现定时任务:最佳性能,因为所有数据都保存在内存中,但是应用程序或系统崩溃时,所有信息都会丢失。2.JDBC+...

    spring定时器

    Spring定时器在SSH框架中的应用,Java的Timer类和OpenSymphony的Quartz来执行调度任务

    java 任务,定时器

    Quartz是一个功能强大的java计划任务系统,它通过简单的配置和代码完成各种计划人数,定时单机应用到分布式的计算机间远程任务调度,都可以做到。 quartz是一个按照设定的时间规则来调度作业的调度器,比如可以...

    Quartz开发指南

    Quartz能嵌入到任何独立的应用中运行。  Quartz能在应用服务器或者Servlet容器中实例化,并且能够参与XA事务。  Quartz能够以独立的方式运行(在它自己的Java虚拟机中),可以通过RMI使用

Global site tag (gtag.js) - Google Analytics