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中的非字符串的序列化对象的类型转换问题。

相关文章