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使用JobStoreTXSQL Server,来让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中的非字符串的体系化对象的类型转换问题。

相关文章