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

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中的非字符串的连串化对象的类型转换难点。

相关文章