Quartz.net官方开发指南 第九课: JobStore

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:
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 )。对于有些应用来说,这是可以接受的,甚至是期望的行为。但是对于其他应用来说,这将是灾难。
为了使用RAMJobStore(假设你使用DirectSchedulerFactory),指使简单地将类名Quartz.Simpl.RAMJobStore作为你的quartz的配置值。
配置 Quartz 使用 RAMJobStore
< quartz >
         < add   key = "quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
</ quartz >
这里没有其他需要的担心的配置。 Qiartz.net缺省使用的就是RAMJobStore.
ADO.NET Job Store (AdoJobStore)
基于 ADO.NET  job store  目前正在开发中,还存在很多的 bug.  0.6 版本开始
AdoJobStore 基本上可以用了 .
AdoJobStore 的命名也非常得体,它将所有的数据通过 ADO.NET 保存到数据库可中。它的配置要比 RAMJobStore 稍微复杂,同时速度也没有那么快。但是性能的缺陷不是非常差,尤其是如果你在数据库表的主键上建立索引。
AdoJobStore 几乎可以在任何数据库上工作,它广泛地使用 Oracle, MySQL, MS SQLServer2000, HSQLDB, PostreSQL  以及  DB2 。要使用 AdoJobStore ,首先必须创建一套 Quartz 使用的数据库表,可以在 Quartz  database\tables 找到创建库表的 SQL 脚本。如果没有找到你的数据库类型的脚本,那么找到一个已有的,修改成为你数据库所需要的。需要注意的一件事情就是所有 Quartz 库表名都以 QRTZ_ 作为前缀(例如:表 "QRTZ_TRIGGERS", "QRTZ_JOB_DETAIL" )。实际上,可以你可以将前缀设置为任何你想要的前缀,只要你告诉 AdoJobStore 那个前缀是什么即可(在你的 Quartz 属性文件中配置)。对于一个数据库中使用多个 scheduler 实例,那么配置不同的前缀可以创建多套库表,十分有用。
一旦数据库表已经创建,在配置和启动 AdoJobStore 之前,就需要作出一个更加重要的决策。你要决定在你的应用中需要什么类型的事务。如果不想将 scheduling 命令绑到其他的事务上,那么你可以通过对 JobStore 使用 JobStoreTX 来让 Quartz 帮你管理事务(这是最普遍的选择)。
最后的疑问就是如何建立获得数据库联接的数据源( DataSource )。 Quartz 属性中定义数据源是通过提供所有联接数据库的信息,让 Quartz 自己创建和管理数据源。
要使用AdoJobStore(假定使用StdSchedulerFactory),首先需要设置Quartz配置中的quartz.jobStore.type属性为Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
配置 Quartz使用 JobStoreTx
quartz.threadPool.type  =  Quartz.Simpl.SimpleThreadPool, Quartz
下一步,需要为 JobStore  选择一个 DriverDelegate  ,  DriverDelegate 负责做指定数据库的所有 ADO.NET 工作。 StdADO.NETDelegate 是一个使用 vanilla" ADO.NET 代码(以及 SQL 语句)来完成工作的代理。如果数据库没有其他指定的代理,那么就试用这个代理。只有当使用 StdADO.NETDelegate 发生问题时,我们才会使用数据库特定的代理(这看起来非常乐观。其他的代理可以在Quartz.Impl.AdoJobStor命名空间找到。)。其他的代理包括 PostgreSQLDelegate (  专为 PostgreSQL 7.x)
一旦选择好了代理,就将它的名字设置给 AdoJobStore
配置AdoJobStore 使用DriverDelegate
quartz.threadPool.type  = Quartz.Simpl.SimpleThreadPool, Quartz
接下来,需要为 JobStore 指定所使用的数据库表前缀(前面讨论过)。
配置AdoJobStore的数据库表前缀
quartz.jobStore.tablePrefix  =  QRTZ
然后需要设置 JobStore 所使用的数据源。必须在 Quartz 属性中定义已命名的数据源,比如,我们指定 Quartz 使用名为 "default" 的数据源(在配置文件的其他地方定义)。
配置 AdoJobStore使用数据源源的名字
properties[ "quartz.jobStore.dataSource" ] =  "default"
    最后,需要配置数据源的使用的Ado.net数据提供者和数据库连接串,数据库连接串是标准的Ado.net 数据库连接的连接串。数据库提供者是关系数据库同Quartz.net之间保持低耦合的数据库的连接提供者。
配置AdoJobStore使用数据源源的数据库连接串和数据库提供者
quartz.dataSource.default.connectionString = Server=(local);Database=quartz;Trusted_Connection=True;
quartz.dataSource.default.provider= SqlServer-11
    目前Quartz.net支持的以下数据库的数据提供者:
  • SqlServer-11 - SQL Server driver for .NET Framework 1.1
  • SqlServer-20 - SQL Server driver for .NET Framework 2.0
  • OracleClient-20 - Microsoft's Oracle Driver (comes bundled with .NET Framework)
  • OracleODP-20 - Oracle's Oracle Driver
  • MySql-10 - MySQL Connector/.NET v. 1.0.7
  • MySql-109 - MySQL Connector/.NET v. 1.0.9
  • MySql-50 - MySQL Connector/.NET v. 5.0 (.NET 2.0)
  • MySql-51 - MySQL Connector/:NET v. 5.1 (.NET 2.0)
  • SQLite1044 - SQLite ADO.NET 2.0 Provider v. 1.0.44 (.NET 2.0)
如果Scheduler非常忙(比如,执行的任务数量差不多 和线程池的数量相同,那么你需要正确地配置 DataSource 的连接数量为线程池数量。 为了指示 AdoJobStore 所有的 JobDataMaps 中的值都是字符串,并且能以 名字 - 对的方式存储而不是以复杂对象的序列化形式存储在 BLOB 字段中,应设置   quartz.jobStore.useProperties 配置参数的值为 "true"( 这是缺省的方式 ) 。这样做,从长远来看非常安全,这样避免了对存储在 BLOB 中的非字符串的序列化对象的类型转换问题。





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/73988,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章