JobStore负责保持对所有scheduler “工作数据”追踪,这些工作数据包括:job(任务),trigger(触发器),calendar(日历)等。为你的Quartz scheduler选择合适的JobStore是非常重要的一步,幸运的是,如果你理解了不同的JobStore之间的差别,那么选择就变得非常简单。在提供产生scheduler 实例的SchedulerFactory的属性文件中声明scheduler所使用的JobStore(以及它的配置)。
注:不要在代码中直接使用JobStore实例,处于某些原因,很多人试图这么做。JobStore是由Quartz自身在幕后使用。你必须告诉(通过配置)Quartz使用哪个JobStore,而你只是在你的代码中使用Scheduler接口完成工作。
RAMJobStore
RAMJobStore是最简单的JobStore,也是性能最好的(根据CPU时间)。从名字就可以直观地看出,RAMJobStore将所有的数据都保存在RAM中。
这就是为什么它闪电般的快速和如此容易地配置。缺点就是当应用结束时所有的日程信息都会丢失,
这意味着RAMJobStore不能满足Jobs和Triggers的持久性(“non-volatility”)。对于有些应用来说,
这是可以接受的,甚至是期望的行为。但是对于其他应用来说,这将是灾难。
配置
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
Qiartz.net缺省使用的就是RAMJobStore
JDBCJobStore
JDBCJobStore通过jdbc保存所有数据到数据库,它的配置要比RAMJobStore稍微复杂,同时速度也没有那么快。
但是性能的缺陷不是非常差,尤其是如果你在数据库表的主键上建立索引。
JDBCJobStore几乎可以在任何数据库上工作,它广泛地使用Oracle, MySQL, MS SQLServer2000, HSQLDB, PostreSQL 以及 DB2。
要使用JDBCJobStore,首先必须创建一套Quartz使用的数据库表,可以在Quartz 的docs/dbTables找到创建库表的SQL脚本。
如果没有找到你的数据库类型的脚本,那么找到一个已有的,修改成为你数据库所需要的。
需要注意的一件事情就是所有Quartz库表名都以QRTZ_作为前缀(例如:表"QRTZ_TRIGGERS",及"QRTZ_JOB_DETAIL")。
实际上,可以你可以将前缀设置为任何你想要的前缀,只要你告诉JDBCJobStore那个前缀是什么即可(在你的Quartz属性文件中配置)。
对于一个数据库中使用多个scheduler实例,那么配置不同的前缀可以创建多套库表,十分有用。
一旦数据库表已经创建,在配置和启动JDBCJobStore之前,就需要作出一个更加重要的决策。你要决定在你的应用中需要什么类型的事务。
如果不想将scheduling命令绑到其他的事务上,那么你可以通过对JobStore使用JobStoreTX来让Quartz帮你管理事务(这是最普遍的选择)。
如是你需要Quartz使用其它事务(例如j2ee 应用服务器),你需要使用JobStoreStoreCMT(这时应用服务器容器会管理事务)
最后的疑问就是如何建立获得数据库联接的数据源(DataSource)。Quartz属性中定义数据源是通过提供所有联接数据库的信息,
让Quartz自己创建和管理数据源。这里有很多种不同的方式,一种是Quartz提供所有数据库连接信息自己创建管理DataSource.
另一种方式是Quartz使用数据源来管理应用服务器上运行的Quartz.具体的信息例子在"docs/config"
要使用JDBCJobStore(假定使用StdSchedulerFactory),首先需要设置Quartz配置中的quartz.jobStore.type属性为
org.quartz.impl.jdbcjobstore.JobStoreTX or org.quartz.impl.jdbcjobstore.JobStoreCMT
配置
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
下一步,需要为JobStore 选择一个DriverDelegate , DriverDelegate负责做指定数据库的所有JDBC工作。
StdJDBCDelegate 是一个使用vanilla" JDBC代码(以及SQL语句)来完成工作的代理。
如果数据库没有其他指定的代理,那么就试用这个代理。只有当使用StdJDBCDelegate 发生问题时,
我们才会使用数据库特定的代理(这看起来非常乐观。其他的代理可以在org.quartz.impl.jdbcjobstore包找到。)。
其他的代理包括PostgreSQLDelegate ( 专为PostgreSQL 7.x)。
一旦选择好了代理,就将它的名字设置给JDBCJobStore 。
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
接下来,需要为JobStore指定所使用的数据库表前缀(前面讨论过)。
org.quartz.jobStore.tablePrefix = QRTZ_
最后,你需要设计数据源使用的jobStore,这个数据源的名字必须在Quartz.properties中定义.
org.quartz.jobStore.dataSource = myDS
如果Scheduler非常忙(比如,执行的任务数量差不多和线程池的数量相同,
那么你需要正确地配置DataSource的连接数量为线程池数量+1。
为了指示JDBCJobStore所有的JobDataMaps中的值都是字符串,
并且能以“名字-值”对的方式存储而不是以复杂对象的序列化形式存储在BLOB字段中,
应设置 org.quartz.jobStore.useProperties配置参数的值为"true"(这是缺省的方式)。
这样做,从长远来看非常安全,这样避免了对存储在BLOB中的非字符串的序列化对象的类型转换问题。
分享到:
相关推荐
Quartz是Java平台上的一款强大的任务调度...提供的文档《Quartz Job Scheduling Framework 中文版 V0.9.5.chm》和《Readme-说明.htm》将进一步详细解释Quartz的使用方法和配置细节,对于理解和应用Quartz非常有帮助。
在JBoss AS6中使用Quartz,有两种主要的方法来实现定时任务,这两种方法都是基于Quartz框架的。下面将详细解释这两种方法。 **1. 第一种方法:定义MDB-Consumer(Message-Driven Bean)** 这种方法是首选的方式,...
在Java世界中,Quartz是广泛使用的计划任务库,它提供了丰富的API来创建、调度和管理作业。这个"Quartz 定时任务依赖包 jar包"包含了运行Quartz作业调度所需的全部组件。 在描述中提到的"quartz实现定时任务业务...
- **使用 SimpleTriggerBean**:通过配置 `startDelay` 属性来设定调度器在初始化后多久开始执行任务,同时设置 `repeatCount` 为 0 来确保任务只执行一次。 ```xml ...
以下是对Quartz核心概念和功能的详细解释。 1. **Jobs**:在Quartz中,作业是实际执行的工作单元。你可以创建自定义的Java类来实现`org.quartz.Job`接口或继承`org.quartz.StatefulJob`(如果作业的状态需要在执行...
它还解释了如何自定义 Quartz 的行为,如实现自己的 JobStore,这允许你将作业和触发器存储在不同的持久化机制中,比如数据库。 2. **Quartz_Scheduler_Configuration_Guide.pdf**:配置指南专注于如何配置 Quartz ...
下面将详细解释 Quartz 的一些关键概念和技术特性: 1. **Job**:在 Quartz 中,任务被称为 Job。Job 是一个实现了 `org.quartz.Job` 接口的类,包含一个 `execute` 方法,这是执行实际任务的地方。你可以创建自己...
这个"QuartzAPI中文chm"文档是专门为中文用户设计的学习资源,旨在帮助开发者快速理解和掌握Quartz的核心功能和使用方法。 QuartzAPI的主要特点包括: 1. **灵活的任务调度**:Quartz允许开发者定义各种复杂的调度...
通常,这样的示例会包含Spring配置文件(如`applicationContext.xml`或`application.yml`)、Java配置类、定时任务类(实现`org.quartz.Job`接口)以及触发器配置(使用`org.quartz.Trigger`)。 总的来说,了解和...
Quartz 2D是苹果公司开发的一个先进的二维绘图引擎,它的API在iOS、tvOS和macOS的应用程序开发中广泛使用。Quartz 2D的主要特点包括其低级轻量级的二维渲染能力,无与伦比的输出保真度,以及独立于分辨率和设备的...
以下是对Quartz及其四个简单示例的详细解释。 ### Quartz简介 Quartz是Java平台上的一个全功能、完全分布式的作业调度框架。它提供了丰富的API来创建、安排和执行任务。Quartz支持CRON表达式、简单触发器、复合...
以下是对Quartz 2.1.7版的详细解释: 一、Quartz简介 Quartz是一个完全由Java编写的作业调度库,它设计用于作为嵌入到其他应用中的组件,无需额外的服务器。其核心设计目标是灵活性和易用性,能够处理各种复杂的...
Quartz Job Scheduling Framework 是一个强大的、开源的Java作业调度框架,它允许应用程序定义和执行复杂的定时任务...文档将详细解释每个接口和类的功能,提供示例代码,并指导你如何配置和使用Quartz来满足你的需求。
2. **文档**:可能包括PDF或HTML格式的用户手册,详细解释了Quartz的API、配置选项和最佳实践。 3. **库文件**:包含Quartz的JAR文件,以及可能依赖的其他库,如数据库驱动等。 学习Quartz 2.2.2开发包,你可以...
以下是对 "spring-quartz 定时设置详细说明" 的详细解释。 一、Quartz 简介 Quartz 是一个开源的作业调度框架,可以用来创建、调度和执行任务。它支持复杂的调度策略,如按时间间隔执行、在特定日期执行等。Quartz ...
Quartz是一个功能强大的作业调度框架,而Spring则是Java领域中广泛使用的轻量级控制反转(IoC)容器。两者结合能够提供灵活、高效的任务调度解决方案。 #### 二、常见问题及解决方案 ##### 1. 对于`org.quartz....
总结来说,"quartz-2.3.0+构件表T.zip"文件为使用Quartz 2.3版本的开发者提供了关于如何设置和使用持久化功能的关键信息,包括如何构建和理解Quartz使用的数据库表结构。这些知识对于确保任务调度的可靠性和容错性至...
例如,文件中的"关于cronExpression的介绍.doc"可能详细解释了Cron表达式的组成和语法,包括秒、分、小时、日、月和周几等字段,以及通配符和间隔的使用。 3. **Scheduler**: Scheduler是整个Quartz系统的管理者...
在博客中,作者可能详细解释了如何创建一个简单的Quartz应用,包括如何编写Job类,配置Trigger以及如何启动Scheduler。此外,还可能涉及了如何通过API动态修改或暂停Job的执行,以及如何处理并发执行和Job持久化等...
这份“Quartz中文API”文档是针对Quartz框架的详细中文解释,帮助开发者更好地理解和使用这个库。 在Quartz中,核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job代表要执行的任务,Trigger...