隔叶黄莺 The Blog of Unmi

〖隔叶黄莺三四声,挂壁飞瀑千万尘。若是人间无净土,此处为何妙语真! 隔叶黄莺四字,本非取自此句,而有寄寓他意,因见妙语,亦与予心合!〗

BlogJava 首页 新随笔 联系 聚合 管理
  418 Posts :: 105 Stories :: 1369 Comments :: 0 Trackbacks
八. 为 JobStroreTX 创建数据源

当使用持久性 JobStore 时,Quartz 需要一个数据源。数据源扮演着产生数据库连接工厂的角色。在 Java  中,所有的数据源要实现 java.sql.Datasource 接口。Quartz 自身并不提供 Datasource 的所有功能;它只代表了那一职责。默认的,Quartz 能使用另一开源的框架,叫做 Commons DBCP,或者可以通过 JNDI 查找应用服务器中定义的 DataSource

DBCP 是一个 Jakarta Commons 项目,网址是 http://jakarta.apache.org/commons/dbcp。这个框架的二进制版包含在 Quartz 的发行版中,你应该把它加到你的 Quartz  应用中来。你还需要加入 Commons Pool 库,它也包含中 Quartz 发行版中,是 DBCP 要用到的。

使用 JobStoreTX 时,你必须在 quartz.properties 文件中指定 Datasource 属性。这允许 Quartz 为你创建并管理 Datasource。表 6.4 列示了使用 JobStoreTX 时需要的 Datasource 配置属性。

表 6.4. 配置 Quartz Datasource 的可用属性
属性必须
org.quartz.dataSource.NAME.driver
描述:JDBC 驱动类的全限名
org.quartz.dataSource.NAME.URL
描述:连接到你的数据库的 URL(主机,端口等)
org.quartz.dataSource.NAME.user
描述:用于连接你的数据库的用户名
org.quartz.dataSource.NAME.password
描述:用于连接你的数据库的密码
org.quartz.dataSource.NAME.maxConnections
描述:DataSource 在连接接中创建的最大连接数
org.quartz.dataSource.NAME.validationQuary
描述:一个可选的 SQL 查询字串,DataSource 用它来侦测并替换失败/断开的连接。例如,Oracle 用户可选用 select table_name from user_tables,这个查询应当永远不会失败,除非直的就是连接不上了。


表 6.4  中列出的每一个属性,你需要用你选择的名字替换掉属性的 NAME 部分。只要保证 Datasource 的所有属性的 NAME 部分相同就行了。这个名字用于唯一的标识 Datasource。假如你需要配置多个 Datasource (在使用 JobStoreCMT 时你将会这么做),每一个 Datasource 应该有一个唯一的 NAME 值。

代码 6.2 展示了一个为 JobStoreTX 配置 Datasource 的例子,它需要加到 quartz.properties 文件中

代码 6.2. 一个用于非 CMT 环境的 Quartz Datasource 的例子



像上面代码 6.2 那样加入了 Datasource 部分到 quartz.properties 文件后,你仍然需要使之对于已配置的 Quartz JobStoreTX 是可用的。你可以通过把下面的属性加到属性文件中来做到这一点:

org.quartz.jobStore.DataSource = <DS_NAME>

这个 <DS_NAME> 应该与指定给个 Datasource 配置的名字相匹配。对于代码 6.2 中的例子来使用 Datasource,你应当在 quartz.properties 文件中加入下面这行:

org.quartz.jobStore.dataSource = myDS

这个值然后会传递给 JobStoreSupport 并且对于你的 JobStoreTX 就可用了,这样连接就可以被获取并传递到 DriverDelegate 实例。

九. 应用 JobStoreTX 运行 Quartz

当你已完成前面的配置步骤时,你的程序就可以准备启动了。正如前面所有的例子那样,你仍然需要一个启动类来从工厂创建一个 Scheduler 实例,并调用它的 start() 方法。一个如代码 6.3 中的类就足够了。

代码 6.3. 简单的启动类,从命令行调用来启动 Scheduler



当你使用代码 6.3 中的 SchedulerMain 类来测试 JobStoreTX 配置,你将得到类似于如下那样的输出:

INFO [main] - Quartz Scheduler v.1.5.0 created.
INFO [main] - Using thread monitor-based data access locking (synchronization).
INFO [main] - Removed 0 Volatile Trigger(s).
INFO [main] - Removed 0 Volatile Job(s).
INFO [main] - JobStoreTX initialized.
INFO [main] - Quartz scheduler 'QuartzScheduler' initialized from default resource
file in Quartz package: 'quartz.properties'
INFO [main] - Quartz scheduler version: 1.5.0
INFO [main] - Scheduler starting up...
INFO [main] - Freed 0 triggers from 'acquired' / 'blocked' state.
INFO [main] - Recovering 0 jobs that were in-progress at the time of the last
shut-down.

INFO [main] - Recovery complete.
INFO [main] - Removed 0 'complete' triggers.
INFO [main] - Removed 0 stale fired job entries.
INFO [main] - Scheduler QuartzScheduler_$_NON_CLUSTERED started.


日志信息是用 Log4J 显示的,因而它们可能和你实际的输出略有差别。一些事情从输出来看是很明显的。首先,在数据库中没有发现 Trigger 或 Job。这是很重要的,有些时候也是使人困惑之处。用了数据库却未给你加载任何的 Job 或 Trigger:是这样的,因为它无法知道谁来为你加载。这是你自己不得不做的事情,你可以几种方式把 Scheduler 信息存入到数据库中。




[版权声明]
本站内文章,如未特别注明,均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
posted on 2008-05-31 10:03 隔叶黄莺 阅读(1486) 评论(0)  编辑  收藏 所属分类: Quartz

专题:Android  iPad  jQuery  Chrome OS

博客园首页  IT新闻  知识库  学英语  Java程序员招聘
标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录      
每天10分钟,轻松学英语


网站导航: