`
charlotte
  • 浏览: 124316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
Quartz由James House创建并最初于2001年春天被加入sourceforge工程
Quartz调度器
  
  Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。

作业管理和存储
  
  作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数。如果你的作业是30分钟后或每30秒调用,这不是很有用。事实上,作业执行需要非常准确和即时调用在被调度作业上的execute()方法。Quartz通过一个称之为作业存储(JobStore)的概念来做作业存储和管理。

有效作业存储
  
  Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,它利用通常的内存来持久化调度程序信息。这种作业存储类型最容易配置、构造和运行。对许多应用来说,这种作业存储已经足够了。然而,因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。如果你需要在重新启动之间持久化调度信息,则将需要第二种类型的作业存储。
  
  第二种类型的作业存储实际上提供两种不同的实现,但两种实现一般都称为JDBC作业存储。两种JDBC作业存储都需要JDBC驱动程序和后台数据库来持久化调度程序信息。这两种类型的不同在于你是否想要控制数据库事务或这释放控制给应用服务器例如BEA's WebLogic或Jboss。(这类似于J2EE领域中,Bean管理的事务和和容器管理事务之间的区别)
  
  这两种JDBC作业存储是:
  
  ·JobStoreTX:当你想要控制事务或工作在非应用服务器环境中是使用
  ·JobStoreCMT:当你工作在应用服务器环境中和想要容器控制事务时使用。
  
  JDBC作业存储为需要调度程序维护调度信息的用户而设计。
  
  作业和触发器
  
  Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要 CronTrigger。
 CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。

编程调度同声明性调度
  
  例3中,我们通过编程的方法调度我们的ScanFTPSiteJob作业。就是说,我们用java代码来设置作业和触发器。Quartz框架也支持在xml文件里面申明性的设置作业调度。申明性方法允许我们更快速地修改哪个作业什么时候被执行。
  
  Quartz框架有一个插件,这个插件负责读取xml配置文件。xml配置文件包含了关于启动Quartz应用的作业和触发器信息。所有xml文件中的作业连同相关的触发器都被加进调度器。你仍然需要编写作业类,但配置那些作业类的调度器则非常动态化。例4展示了一个用申明性方式执行与例3代码相同的逻辑的xml配置文件。

 有状态和无状态作业
  
  在本文中你所看到的作业到是无状态的。这意味着在两次作业执行之间,不会去维护作业执行时JobDataMap的状态改变。如果你需要能增、删,改JobDataMap的值,而且能让作业在下次执行时能看到这个状态改变,则需要用Quartz有状态作业。
  
  如果你是一个有经验的EJB开发者的话,深信你会立即退缩,因为有状态带有负面含义。这主要是由于EJB带来的伸缩性问题。Quartz有状态作业实现了org.quartz.StatefulJob接口。无状态和有状态作业的关键不同是有状态作业在每次执行时只有一个实例。大多数情况下,有状态的作业不回带来大的问题。然而,如果你有一个需要频繁执行的作业或者需要很长时间才能完成的作业,那么有状态作业可能给你带来伸缩性问题。
  
  Quartz框架的其他特征
  
  Quartz框架有一个丰富的特征集。事实上,quarts有太多特性以致不能在一种情况中全部领会,下面列出了一些有意思的特征,但没时间在此详细讨论。
  
  监听器和插件
  
  每个人都喜欢监听和插件。今天,几乎下载任何开源框架,你必定会发现支持这两个概念。监听是你创建的java类,当关键事件发生时会收到框架的回调。例如,当一个作业被调度、没有调度或触发器终止和不再打火时,这些都可以通过设置来来通知你的监听器。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。
  
  一旦你的一个具体监听被调用,你就能使用这个技术来做一些你想要在监听类里面做的事情。例如,你如果想要在每次作业完成时发送一个电子邮件,你可以将这个逻辑写进作业里面,也可以JobListener里面。写进JobListener的方式强制使用松耦合有利于设计上做到更好。
  
  Quartz插件是一个新的功能特性,无须修改 Quartz源码便可被创建和添加进Quartz框架。他为想要扩展Quartz框架又没有时间提交改变给Quartz开发团队和等待新版本的开发人员而设计。如果你熟悉Struts插件的话,那么完全可以理解Quartz插件的使用
  
分享到:
评论

相关推荐

    Quartz.net-定时任务 Demo

    Quartz.NET是一款强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。...通过学习和实践这个"Quartz.net-定时任务 Demo",你将能够熟练地在自己的项目中使用Quartz.NET来创建和管理定时任务。

    quartz-all-1.6.0.jar包定时任务jar

    1. **Job**: Job是执行具体业务逻辑的实体,开发者需要实现`Job`接口并重写`execute(JobExecutionContext context)`方法。在这个方法中,你可以编写需要定时执行的代码。 2. **Trigger**: Trigger定义了Job的执行...

    quartz-2.1.6.zip

    quartz-examples-2.1.6.jar 提供了Quartz的示例代码,这些示例可以帮助开发者更好地理解和学习如何使用Quartz的各种特性,例如不同类型的触发器、调度策略和作业存储。 quartz-backward-compat-2.1.6.jar 包含了对...

    quartz-2.3.0-distribution.zip

    "quartz-2.3.0-distribution.zip"这个压缩包包含了Quartz库的2.3.0版本及相关资源,对于开发者来说是学习和使用Quartz的重要资料。 1. **Quartz的核心概念** - **Job**:Quartz中的工作单元,代表一个需要执行的...

    quartz-2.4.0.zip

    1. **API文档**:Quartz提供了详尽的Javadoc,帮助开发者了解如何创建、配置和管理Job以及Trigger。 2. **源代码**:对于学习和调试非常有用,可以深入理解其内部机制。 3. **示例**:通常会有一系列的示例项目,...

    quartz-2.2.2-distribution.rar

    综上所述,这个压缩包提供的 Quartz 2.2.2 版本和 Spring Boot 2.x 的集成示例,对于学习和使用 Quartz 进行任务调度具有很高的参考价值。无论是初学者还是经验丰富的开发者,都可以从中受益,快速掌握如何在 Spring...

    Quartz.NET-2.2

    1. **Job(作业)**:这是你想要执行的任务的实体,它定义了任务的具体行为。 2. **Trigger(触发器)**:负责指定何时启动Job。它可以基于日期、时间间隔或其他自定义条件来触发Job。 3. **Scheduler(调度器)**:...

    quartz-2.2.3-distribution.tar.gz

    Quartz是Java领域的一款强大的开源任务调度框架,用于在应用程序中安排和执行任务。这个"quartz-2.2.3-distribution.tar.gz"压缩包包含的是...通过学习和使用Quartz,你可以构建出更加智能和自动化的Java应用程序。

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-...我们学习了 Quartz 的基本概念,了解了如何在 Spring 配置文件中定义 Quartz 的 bean,并了解了 Cron 表达式的使用。最后,我们总结了 Quartz 的优点,了解了它的强大功能。

    quartz和spring-quartz

    学习Quartz和Spring-Quartz,不仅需要理解它们的基本概念,还要掌握如何在实际项目中进行配置和使用。例如,创建一个定时任务,你需要定义Job类,配置Trigger,然后在Spring的配置文件中设置Scheduler。此外,熟悉...

    ios-Quartz2D-1.zip

    在"ios-Quartz2D-1.zip"这个压缩包中,我们看到一个名为"TMYView"的文件,这很可能是一个自定义视图类,用于演示如何使用Quartz 2D来绘制小黄人图形。 首先,让我们深入理解Quartz 2D的基本概念。Quartz 2D基于Core...

    springboot-quartz-elasticsearch

    这个项目对于学习和理解如何在实际环境中使用Spring Boot、Quartz和Elasticsearch非常有帮助。开发者可以从中学习到如何配置这些组件,如何编写定时任务,以及如何将日志记录与Elasticsearch结合以实现高级的日志...

    quartz-1.8.6.tar

    同时,可以浏览源码和示例,学习如何在实际项目中有效利用Quartz实现任务自动化。 总的来说,Quartz是一个强大且灵活的Java任务调度库,适用于各种需要定时或触发式任务执行的应用场景。无论是在大型企业级系统还是...

    Quartz.NET-2.2 源码

    1. **Quartz.build**: 这是构建脚本,通常包含编译、测试和打包项目的指令,有助于开发者了解项目如何构建和发布。 2. **Quartz.2010.sln** 和 **Quartz.Server.2010.sln**: 这些是Visual Studio解决方案文件,允许...

    quartz-1.6.6 教程,代码

    1. **Quartz 概念** - **Job**:Job 是一个实现了 `org.quartz.Job` 接口的类,代表要执行的任务。 - **Trigger**:Trigger 定义了 Job 的执行时间,如简单触发器、cron 触发器等。 - **Scheduler**:Scheduler ...

    Quartz.NET-0.9.1

    1. **Quartz.build**:这是构建脚本,通常使用MSBuild或类似工具来编译和打包项目。通过运行这个脚本,你可以构建整个Quartz.NET项目,生成可用于部署的库和相关文件。 2. **Quartz.2005.sln、Quartz.2008.sln、...

    quartz-2.1.5.tar.gz

    1. **任务调度**:Quartz允许程序定义Job(任务)和Trigger(触发器),Job是实际要执行的工作,而Trigger则定义了Job何时被执行。你可以设置一次性任务或周期性的任务,例如每小时运行一次。 2. **灵活的调度策略*...

    quartz-2.2.1.jar

    1. 作业(Job):作业是Quartz中可被调度的基本执行单元。它是一个实现了`org.quartz.Job`接口的类,包含具体的业务逻辑。作业不直接与调度器交互,而是通过作业细节(JobDetail)来关联。 2. 作业细节(JobDetail...

    grails-quartz-0.4.1

    Grails Quartz插件的优势在于其高度的可配置性和灵活性,开发者可以轻松地定义复杂的调度策略,同时避免了与底层Quartz API的直接交互,降低了学习曲线。 总结,Grails Quartz 0.4.1插件为Grails开发者提供了一种...

    quartzAPI-2.2.1参看文档

    1. **Quartz基本概念**: - **Job**:是执行的具体任务,可以理解为一个工作单元,包含具体要执行的业务逻辑。 - **Trigger**:触发器,定义了 Job 的执行时间,例如简单的定时器或根据特定日期或间隔触发。 - **...

Global site tag (gtag.js) - Google Analytics