回到顶部

Quartz.NET 2.x 文档翻译 - Lesson 9:JobStores

时间:2年前   作者:请喊我大龙哥   浏览:267   [站内原创,转载请注明出处]

Quartz.NET 2.x 文档翻译 - Lesson 9:JobStores 查看官网英文原文

返回目录

JobStores负责跟踪所有的scheduler调度“工作数据”,jobs, triggers, calendars, etc等。选择合适的IJobStore实现是我们使用Quartz scheduler调度很重要的一步,其实只要我们熟悉这些实现,使用起来还是很方便的,只需要我们定义好哪个JobStore用于scheduler调度使用在SchedulerFactory的生产调度实例中。

我们不要在代码中直接使用JobStore,但是貌似很多人出于不同的原因这样用了。JobStore是在Quartz中进行配置使用的,所以我们需要做的是告诉Quartz使用那个JobStore,最后在我们的代码中是通过使用Scheduler调度来操作的。

RAMJobStore

RAMJobStore是最简单的JobStore,也是最高效的。RAMJobStore的命名来自于它的使用方式:它保持它的所有数据在RAM中,这也是为什么它性能比较高的原因,配置也是很简单便捷。缺点是当应用程序结束,所有调度信息丢失,这个时候RAMJobStore就不能执行兑现“non-volatility”在job和Trigger上,再次启动应用程序还需要从新配置等。对于某些应用程序来说可能是可以接受的,但是对于其他的则是不可以接受的。

Configuring Quartz to use RAMJobStore
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz
使用RAMJobStore的时候我们不需要刻意做什么,Quartz.NET的默认配置是使用RAMJobStore作为jobstore的实现。

ADO.NET Job Store (AdoJobStore)

AdoJobStore的命名也是基于其数据存储方式,AdoJobStore通过 ADO.NET 将数据存储在数据库中。相对于RAMJobStore来说这就稍微有点复杂了,也不如前者性能高,不过性能损失也不是很厉害,如果我们建立好数据库的主键索引,那么性能也是可以的。

使用AdoJobStore,我们首先要创建一个数据库给Quartz.NET使用,我们可以在我们下载的Quartz.NET目录下的database文件夹找到创建表的sql语句,如果没有你要用的数据库类型的创建脚本,可以参考其他类型的数据库脚本自己编写一个就可以了,默认的脚本创建都是用“QRTZ_”开头的,我们也可以根据我们的需要来修改,只需要我们告诉AdoJobStore新的前缀是什么就ok了,使用不同的前缀可以用于我们不同的业务,多个调度的时候,我们也可以在一个数据库操作进行。

目前quartz.net内唯一可用的jobstore是JobStoreTX,这个不同于java版本的quartz,java版本的可以选择是哟那个了J2EE容器管理事务的JobStoreCMT。

最后一项设置就是让AdoJobStore能获得数据库连接并成功连接到数据库,在我们的Quartz.NET属性中设置Data数据源,Data数据源信息包括连接字符串和ADO.NET委托信息。

Configuring Quartz to use JobStoreTx
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
接下来,我们需要选择一个IDriverDelegate来给JobStore使用,DriverDelegate用于我们数据库的ADO.net操作。StdAdoDelegate是一个使用“vanilla” ADO.NET 代码来工作的的委托,如果没有你使用数据库的委托,尝试使用此委托来解决特定数据库问题。其他的委托可以查看Quartz.Impl.AdoJobStore命名空间下及其子空间下的。

注意:如果我们有很多的Trigger触发器并使用默认的StdAdoDelegate(性能较差)来执行操作,Quartz.NET就会提示警告信息,每一个数据库委托都有特定的SQL语法来限定返回结果的长度(SQLServerDelegate 使用 TOP n, PostgreSQLDelegate LIMIT n, OracleDelegate ROWCOUNT() <= n etc.)。

一旦我们选择了我们的数据库委托,我们需要给AdoJobStore设置class名称以便我们后续的使用。

Configuring AdoJobStore to use a DriverDelegate
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz
接下来我们需要设置数据库表前缀信息给JobStore使用
Configuring AdoJobStore with the Table Prefix
quartz.jobStore.tablePrefix = QRTZ_
最后,我们需要设置JobStore的Data数据源信息,名称也必须是在Quartz属性定义好的,在这种情况下,我们可以使用数据源名称“myDS”。

Configuring AdoJobStore with the name of the data source to use
quartz.jobStore.dataSource = myDS
我们还需要配置的是data数据源的链接字符串和database驱动,连接字符串是明确驱动的ADO.NET连接,数据库提供程序是数据库驱动的抽象,用于在Quartz和database之间创建松耦合的连接。

Setting Data Source’s Connection String And Database Provider
quartz.dataSource.myDS.connectionString = Server=localhost;Database=quartz;Uid=quartznet;Pwd=quartznet
quartz.dataSource.myDS.provider = MySql-50
quartz对以下数据库提供程序已经做了支持:
  1. SqlServer-20 - SQL Server driver for .NET Framework 2.0
  2. OracleODP-20 - Oracle’s Oracle Driver
  3. OracleODPManaged-1123-40 Oracle’s managed driver for Oracle 11
  4. OracleODPManaged-1211-40 Oracle’s managed driver for Oracle 12
  5. MySql-50 - MySQL Connector/.NET v. 5.0 (.NET 2.0)
  6. MySql-51 - MySQL Connector/:NET v. 5.1 (.NET 2.0)
  7. MySql-65 - MySQL Connector/:NET v. 6.5 (.NET 2.0)
  8. SQLite-10 - SQLite ADO.NET 2.0 Provider v. 1.0.56 (.NET 2.0)
  9. Firebird-201 - Firebird ADO.NET 2.0 Provider v. 2.0.1 (.NET 2.0)
  10. Firebird-210 - Firebird ADO.NET 2.0 Provider v. 2.1.0 (.NET 2.0)
  11. Npgsql-20 - PostgreSQL Npgsql
如果可以的话,建议使用最新版本的驱动程序,只需要创建一个组件绑定重定向。

如果我们的Scheduler运行很繁忙,也就是总在执行和线程池数据类似的job任务),那么我们就需要设置数据源连接数大概在线程池数量范围,通常是在ADO.NET连接字符串中设置。

“quartz.jobStore.useProperties”配置参数可以设置为“True”(默认是False),设置后在AdoJobStore的JobDataMaps中的数值将是字符串类型,这样就可以存储name-value这种键值对数据,就不在存储对象系列化这种复杂的数据格式,这样也较为安全,避免了不同版本序列化的问题。

配置adojobstore使用字符串作为JobDataMap值(推荐) 
quartz.jobStore.useProperties = true

返回目录

请喊我大龙哥最后编辑于:2年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。