Quartz是一个完全由java编写的开源作业调度框架,下面提供一个小例子供大家参考,还有在servlet配置的方法

Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到http://www.opensymphony.com/quartz/官方网站查看。



Quartz的几个核心的接口和类为:



Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。

Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。

Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。

JobDetail类:具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。

JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。

JobDataMap类:用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.

JobListener,TriggerListener接口:用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。

JobStore类:在哪里执行定进程序,可选的有在内存中,在数据库中。



简单的定时程序:

复制代码代码如下:


public class TestJob implements Job

{

   public TestJob(){}

   public void execute(JobExecutionContext arg0) throws JobExecutionException

   {

      String name = context.getJobDetail().getJobDataMap().getString("name");

      System.out.println("job executing..."+name);   }

}



public class QuartzTest

{

 public static void main(String[] args)

 {

    QuartzTest test = new QuartzTest();

    try

   {

      test.startSchedule();

   }

  catch (Exception e)

  {

     e.printStackTrace();

  }

 }

 public void startSchedule() throws Exception

 {

     Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

     JobDetail jobDetail =

      new JobDetail("testJob", Scheduler.DEFAULT_GROUP, TestJob.class);

      //结束时间     

     long end = System.currentTimeMillis() + 9000L;

    //执行10次,每3秒执行一次,到9秒后结束

     SimpleTrigger trigger = new SimpleTrigger("test",null,new Date(),new Date(end),10,3000L);

      scheduler.scheduleJob(jobDetail, trigger);

     scheduler.start();

 }

}

 

执行上面这个类基本实现了一个简单的定时程序。但问题是现在这个类只能应用在application中,在web环境里执行还需要添加一些配置,例如添加servlet,添加配置文件quartz.properties或者quartz-job.xml(在XML文件里以配置方式定义triiger,定时描述等)。



web应用中使用

 

在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化。我在使用servlet时加载成功,在使用listener时不成功,不知道怎么回事?

servlet配置:

复制代码代码如下:


<servlet> 

   <servlet-name>QuartzInitializer</servlet-name> 

   <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 

   <init-param>

     <param-name>shutdown-on-unload</param-name>

     <param-value>true</param-value>

   </init-param>

   <init-param>

    <param-name>config-file</param-name>

    <param-value>quartz.properties</param-value> 

   </init-param>

   <load-on-startup>2</load-on-startup>

 </servlet>

listener配置可以看源码,主要的上面的参数配置为<context-param>,再加一个<listener>.



上面提到了quartz.properties,这是自行指定的,Quartz提供了一个默认的配置文件,可以满足基本的j2se应用,如果在web应用中,我们想把job,trigger配置都写到文件中,就需要自己来写,并指定在初始化时加载我们自己的quratz.properties,位置放在classes下。



#============================================================================

# Configure Main Scheduler Properties  

#============================================================================

org.quartz.scheduler.instanceName = org.quartz.scheduler.instanceId = AUTO

#============================================================================

# Configure ThreadPool  

#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 3

org.quartz.threadPool.threadPriority = 5

#============================================================================

# Configure Plugins 

#============================================================================

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin

org.quartz.plugin.jobInitializer.fileName = /scheduler/quartz_jobs.xml

org.quartz.plugin.jobInitializer.overWriteExistingJobs = true

org.quartz.plugin.jobInitializer.failOnFileNotFound = true

org.quartz.plugin.jobInitializer.scanInterval = 10



quartz要使用插件来加载自己的xml配置文件,上边我们指定了在初始化时加载classes/scheduler/quartz_jobs.xml,默认的是加载classes/quartz_jobs.xml文件。



quartz_jobs.xml文件:

<?xml version='1.0' encoding='utf-8'?>

<quartz>

 <job>

   <job-detail>

    <name>test</name>

    <group>DEFAULT</group>

    <description>testJobhere</description>

    <job-class>TestJob</job-class>

    <job-data-map allows-transient-data="true">

     <entry>

      <key>name</key>

      <value>test</value>

     </entry>

   </job-data-map>

   </job-detail>

   <trigger>

             <cron>

                  <name>testCron</name>

                  <group>DEFAULT</group>

                  <job-name>test</job-name>

                 <job-group>DEFALUT</job-group>

                 <cron-expression>0/3 * * * * ?</cron-expression>

             </cron>

       </trigger>

  </job>

</quartz>

上面配置了一个作业,并声明一个参数Name;配置了一个CronTrigger,每三秒执行一次。如果要配置SimpleTrigger ,可以使用<simple>标签。



上面与Job对应的类为TestJob,源码为:

复制代码代码如下:


public class TestJob implements Job

{

 public TestJob(){}

 public void execute(JobExecutionContext context) throws JobExecutionException

 {

     String name = context.getJobDetail().getJobDataMap().getString("name");

     System.out.println("job executing..."+name);

 }

}

在quartz_job.xml文件中还可以指定TriggerListener,JobListener等,可以使用<trigger-listener>,<job-listener>标签来指定。



由于quartz目前文档不是很多,大部分都是看源码。总体看Quartz提供的CronTrigger使用表达式方式描述定时规律这个功能还是很强大的,在其源码中有很多例子。



spring已经把quartz集成在一起,并进行了封装,使用起来还是很方便的。


quartz实现定时功能实例详解(servlet定时器配置方法)的更多相关文章

  1. jQuery、layer实现弹出层的打开、关闭功能实例详解

    本文主要介绍了jQuery.layer实现弹出层的打开.关闭功能,需要的朋友可以参考下,希望能帮助到大家. 打开弹出层: 在list页面带入layer.js 在list页面点击时,弹出form弹出层, ...

  2. FasfDFS整合Java实现文件上传下载功能实例详解

    https://www.jb51.net/article/120675.htm 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java ...

  3. mysql数据库分区功能及实例详解

    分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解   一,什么是数据库分区 前段时间写过一篇 ...

  4. 【python库模块】Python subprocess模块功能与常见用法实例详解

    前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...

  5. linux基础-磁盘阵列(RAID)实例详解

    磁盘阵列(RAID)实例详解 raid技术分类 软raid技术 硬raid技术 Raid和lvm的区别 为什么选择用raid RAID详解 RAID-0 RAID-1 RAID-5 Raid-10 R ...

  6. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  7. Entity Framework实例详解

    Entity Framework Code First的默认行为是使用一系列约定将POCO类映射到表.然而,有时候,不能也不想遵循这些约定,那就需要重写它们.重写默认约定有两种方式:Data Anno ...

  8. 转载 《AngularJS》5个实例详解Directive(指令)机制

    <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请 ...

  9. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发

    Fiddler是Windows底下最强大的请求代理调试工具,监控任何浏览器的HTTP/HTTPS流量,窜改客户端请求和服务器响应,解密HTTPS Web会话,图4.44为Fiddler原理示意图. 图 ...

随机推荐

  1. PHP 实例 AJAX 与 XML

    在 PHP 中,AJAX 可用来与 XML 文件进行交互式通信,具体的通信过程,请参考本文内容! AJAX XML 实例 下面的实例将演示网页如何通过 AJAX 从 XML 文件读取信息: 实例   ...

  2. Django URL (路由系统)

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那 ...

  3. zookeeper基本原理及适用场景 转:http://blog.chinaunix.net/uid-26748613-id-4536290.html

    1.1 zookeeper简介 Zookeeper 是 Hadoop 生态系统中的协同实现,是Hadoop集群管理的一个必不可少的模块,它主要来控制集群中的数据,如它管理Hadoop集群中的NameN ...

  4. mysql 数据类型别名参考

    To facilitate the use of code written for SQL implementations from other vendors, MySQL maps data ty ...

  5. Ajax原理学习

    一.AJAX 简介 AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. A ...

  6. Save results to different files when executing multi SQL statements in DB Query Analyzer 7.01

        1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainl ...

  7. Maven坐标机制

    Maven为所有的项目引入了坐标,基于坐标机制可以唯一定位一个项目. 坐标详解 以spring-core-2.5.6.jar的坐标定义为例,说明组成坐标的所有元素:groupId.artifactId ...

  8. Android初级教程:RatingBar的使用

    记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...

  9. 【SSH系列】-- Hibernate持久化对象的三种状态

    在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...

  10. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...