Quartz框架简介

一、Quartz概述:

Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间。其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。主要用来执行定时任务,如:定时发送信息、定时生成报表等等。

二、相关术语:

三、Quartz的体系结构简介:

Quartz框架主要核心组件包括调度器、触发器、作业。调度器作为作业的总指挥,触发器作为作业的操作者,作业为应用的功能模块。其关系如下图所示:

Job为作业的接口,为任务调度的对象;JobDetail用来描述Job的实现类及其它相关的静态信息;Trigger做为作业的定时管理工具,一个Trigger只能对应一个作业实例,而一个作业实例可对应多个触发器;Scheduler做为定时任务容器,是quartz最上层的东西,它提携了所有触发器和作业,使它们协调工作,每个Scheduler都存有JobDetail和Trigger的注册,一个Scheduler中可以注册多个JobDetail和多个Trigger。

1、Job

Job是一个接口,只有一个方法void execute(JobExecutionContext context),被调度的作业(类)需实现该接口中execute()方法,JobExecutionContext类提供了调度上下文的各种信息。每次执行该Job均重新创建一个Job实例,如:

[java] view plain copy

print?

  1. public class DDNJob implements Job{
  2. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  3. perform();
  4. }
  5. public void perform(){ //执行报表统计入口函数
  6. //业务逻辑
  7. System.out.println("自动DDN预授权开始执行-------------执行时间:"+new Date());
  8. }
  9. }

注:DDNJob类为需要定时执行的类,execute为定时执行的方法。一个定时任务对应一个Job实现类。

2、JobDetail

Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail,

示例:

[java] view plain copy

print?

  1. 1.  JobDetail jobDetail = new JobDetail("myJob","myGroup",DDNJob.class)
  2. 2.  说明:
  3. 3.  myJob:job 名
  4. 4.  myGroup:job 组(为‘null‘时,使用缺省的组sched.DEFAULT_GROUP)
  5. 5.  DDNJob.class:要被执行的Java类。

运用spring集成的MethodInvokingJobDetailFactoryBean时spring能自动生成符合quartz要去的JobDetail。
Spring中applicationContext.xml配置如下:

[html] view plain copy

print?

  1. <!-- detail任务描述 -->
  2. <bean name="DDNDetail"
  3. class="com.mangocity.mpm.common.autoDDN.MethodInvokingJobDetailFactoryBean">
  4. <property name="targetObject" value="DDNJob" />
  5. <property name="concurrent" value="false"/>(并发执行)
  6. <property name="shouldRecover" value="true"/>
  7. </bean>

3、Trigger

Trigger是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;Spring中applicationContext.xml配置如下:

SimpleTrigger使用示例:

[html] view plain copy

print?

  1. // Initiate SimpleTrigger with its name and group name
  2. SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger","triggerGroup1");
  3. // set its start up time
  4. simpleTrigger.setStartTime(new Date(System.currentTimeMillis()));
  5. // set the interval, how often the job should run (10 seconds here)
  6. simpleTrigger.setRepeatInterval(10000);
  7. // set the number of execution of this job, set to 10 times.
  8. simpleTrigger.setRepeatCount(10);

通过Spring配置,jobDetail为配置的Job描述,startDelay为系统启动执行延迟时间,repeatCount为调用次数,repeatInterval为Job触发时间间隔。

[html] view plain copy

print?

  1. <bean id="DDNSimpletrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  2. <property name="jobDetail" ref="DDNDetail"/>
  3. <property name="startDelay" value="1"/>
  4. <property name="repeatCount" value="100"/>
  5. <property name="repeatInterval" value="1000"/>
  6. </bean>

CronTrigger使用示例:

[java] view plain copy

print?

  1. // Initiate CronTrigger with its name and group name
  2. CronTrigger cronTrigger = new CronTrigger("cronTrigger","triggerGroup2");
  3. try {
  4. // setup CronExpression
  5. CronExpression cexp = new CronExpression("0/5 * * * * ?");
  6. // Assign the CronExpression to CronTrigger
  7. cronTrigger.setCronExpression(cexp);
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }

通过Spring配置,jobDetail为配置的Job描述,cronExpression为Job的运行规则,具体见附录部分内容。

[html] view plain copy

print?

  1. <bean id="DDNCrontrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  2. <property name="jobDetail" ref="DDNDetail"/>
  3. <property name="cronExpression" value="0/5 * * ? * * *"/>
  4. </bean>

4、Scheduler

Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。Trigger和JobDetail可以注册到Scheduler中;Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。         Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。 应用示例:

[java] view plain copy

print?

  1. SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  2. // Retrieve a scheduler from schedule factory
  3. Scheduler scheduler = schedulerFactory.getScheduler();
  4. // schedule a job with JobDetail and Trigger
  5. scheduler.scheduleJob(jobDetail, simpleTrigger);
  6. // start the scheduler
  7. scheduler.start();

Spring中applicationContext.xml配置:

[html] view plain copy

print?

  1. <!-- 调度器  -->
  2. <bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  3. <property name="dataSource">
  4. <ref bean="dataSource"/>
  5. </property>
  6. <property name="triggers">
  7. <list>
  8. <!--  触发器列表 -->
  9. <!-- <ref bean="DDNcronTrigger" />  -->
  10. <ref bean="DDNSimpletrigger" />
  11. </list>
  12. </property>
  13. <property name="configLocation" value="classpath:quartz.properties" />
  14. </bean>

其中,dataSource为数据源配置,triggers为触发器列表配置,可以同时包含多个trigger,configLocation为quartz配置文件quartz.properties加载路径。

四、总结:

我们不只有一种两种方法来实现我们的定时任务,就我知道的出了我们的quartz框架之外,我们spring也自己封装有自己的定时器,再加上各种开源的插件。那我工作的公司来说,我们用windows服务来完成这个定时任务,万变不离其宗,理解了他们的原理以及精髓,我们就可以去创新,去写出符合自己要求的工具了!

时间: 2024-10-10 11:34:20

Quartz框架简介的相关文章

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运

Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介

转自:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介 Quartz.NET 2.0 学习笔记(2) :和1.0的几点不同 Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度 Quartz.NET 2.0 学习笔记(4) :c

Quartz 框架 教程(中文版)2.2.x

Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quartz 框架 教程(中文版)2.2.x 之第三课 更多关于Jobs和JobDetails Quartz 框架 教程(中文版)2.2.x 之第四课 更多关于Triggers Quartz 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger Quartz 框架 教程(中文版)2.2.x

Quartz.NET简介

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表.Jobs可以做成标准的Java组件或 EJBs.Quartz的最新版本为Quartz 2.10. Quartz是一个完全由java编写的开源作业调度框架.不要让作业调度这个术语吓着你.尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用

Apache—DBUtils框架简介

转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernat

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM 由  ValRay 发布 已被浏览8409次 共有3条评论 已被2个人收藏 2013-08-16 21:29 顶(1) 踩(0) osgi原理与最佳实践 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 Spring Dynamic Modules.Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环

Hibernate框架简介(二)基本使用增、删、改、查

一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬时状态:在程序运行的时候,有些程序数据是保存在内存中,当程序退出后,这些数据就不复存在了,所以称这些数据的状态为瞬时状态 持久状态:在使用一此软件的时候,有些数据,在程序退出后,还以文件等形式保存在硬盘或者数据库中,称这些数据的状态是持久状态 持久化:持久化就是将程序中的数据在瞬时状态和持久状态之间

Hibernate框架简介

面试被问及了Hibernate框架,虽然问的很少,很简单,但是还是简单的总结一下吧,以备以后不时之需. 什么是Hibernate框架? 百科定义:Hibernate框架式一个开源的对象关系映射(ORM)框架,是对JDBC的轻量级的对象封装,使java程序员可以使用对象思维来操纵DB. 白话版:在Hibernate之前,我们是如何操作DB的?JDBC,需要在程序中嵌入SQL语句.效率低下,不能忍啊.但是Hibernate的出现,让我们无需再操纵SQL语句了,每个表实例被实例化为一个java对象,操