Quartz.Net进阶之六:详述 JobStores
一、介绍
今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下。我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job 的商店,或者说专门用来存储 Job 的容器。废话少说,开始我们今天的学习吧。
二、详述 JobStore
JobStore 负责跟踪您为调度程序提供的所有“工作数据”:任务,触发器,日历等。为 Quartz 调度程序实例选择适当的IJobStore实现是一个重要的步骤。 幸运的是,一旦你理解了它们之间的差异,选择应该是一个非常简单的选择。 在向 SchedulerFactory 提供的用于生成调度器实例的属性文件(或对象)中声明调度器应该使用哪个 JobStore(及其配置设置)。
切勿在代码中直接使用 JobStore 实例。 出于某种原因,许多人试图这样做。 JobStore 用于Quartz本身的幕后使用。 您必须告诉 Quartz(通过配置)使用哪个 JobStore,但是您应该只使用代码中的Scheduler接口。
1、RAMJobStore
RAMJobStore是使用最简单的JobStore,它也是性能最高的(就CPU时间而言)。 RAMJobStore 以见名知意的方式命名:它将所有数据保存在RAM内存中。 这就是它闪电般快速的原因,也是配置如此简单的原因。 缺点是,当您的应用程序结束(或崩溃)时,所有调度信息都将丢失 - 这意味着 RAMJobStore 无法遵守作业和触发器上的“非易失性”设置。 对于某些应用程序,这是可以接受的 - 甚至是期望的行为,但对于其他应用程序,这可能是灾难性的。
配置Quartz以使用RAMJobStore
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz
要使用 RAMJobStore(假设您正在使用StdSchedulerFactory),您不需要做任何特殊的事情。 Quartz.NET的默认配置使用 RAMJobStore 作为任务存储实现。
2、ADO.NET Job Store (AdoJobStore)
AdoJobStore 这个名字取的也很恰如其分 - 它通过ADO.NET将所有数据保存在数据库中。 因此,配置比RAMJobStore要复杂一些,而且速度也不快。 但是,性能这方面的缺点并不是非常的糟糕,特别是如果您使用主键上的索引构建数据库表。
要使用AdoJobStore,首先必须为Quartz.NET创建一组数据库表以供使用。 您可以在 Quartz.NET 发行版的“database / dbtables”目录中找到创建表的SQL脚本。 如果您还没有适用于自己的数据库类型的脚本,可以查看其中现有的脚本,然后根据个人的需求对其进行相应的修改。 需要注意的一点是,在这些脚本中,所有表都以前缀“QRTZ_”开头,例如表“QRTZ_TRIGGERS”和“QRTZ_JOB_DETAIL”。 实际上,这个前缀你可以做任何的修改和定义,只要你通知 AdoJobStore 前缀是什么(在你的Quartz.NET属性中)。 对于在同一数据库内为多个调度程序实例创建多组表,使用不同的前缀可能很有用。
目前,作为作业存储(Job Store)的内部实现的唯一选择就是 JobStoreTX,它自己创建事务。 这与Quartz的Java版本不同,后者还可以选择使用J2EE容器 JobStoreCMT 管理事务的 。
最后一个难题是设置一个数据源,AdoJobStore可以从中获得与数据库的连接。 数据源在Quartz.NET属性中定义。 数据源信息包含连接字符串和ADO.NET委托信息。
配置Quartz以使用JobStoreTx
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
接下来,您需要为 JobStore 选择要使用的 IDriverDelegate 实现。 DriverDelegate 是负责执行针对特定数据库可能需要的任何ADO.NET工作。 StdAdoDelegate是一个使用“vanilla”ADO.NET代码(和SQL语句)来完成其工作的委托。 如果没有专门为您的数据库创建的另一个委托,请尝试使用此委托 - 特殊委托通常具有更好的性能或变通方法来解决数据库特定问题。 其他委托可以在“Quartz.Impl.AdoJobStore”命名空间中找到,也可以在其子命名空间中找到。
注意:如果您正在使用默认的StdAdoDelegate,则Quartz.NET会发出警告,因为当您有很多触发器要从中选择时,它的性能会很差。特定的委托具有特殊的SQL语句来限制结果集长度(SQLServerDelegate使用TOP n、PostgreSQLDelegateLIMITN、OracleDelegate ROWCOUNT()<=n等)。
选择委托之后,将其类名设置为 AdoJobStore 要使用的委托。
配置AdoJobStore以使用DriverDelegate
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz
接下来,您需要通知JobStore您正在使用的表前缀(如上所述)。
quartz.jobStore.tablePrefix = QRTZ_
最后,您需要设置JobStore应该使用哪个数据源。 还必须在Quartz属性中定义指定的数据源。 在这种情况下,我们指定Quartz应该使用数据源名称“myDS”(在配置属性中的其他位置定义)。
使用要使用的数据源的名称配置AdoJobStore
quartz.jobStore.dataSource = myDS
配置的最后一件事是设置数据源连接字符串信息和数据库提供程序。 连接字符串是标准的ADO.NET连接,它是针对特定于驱动程序的。 数据库提供程序是数据库驱动程序的抽象,用于在数据库驱动程序和Quartz之间创建松耦合。
设置数据源的连接字符串和数据库提供程序
quartz.dataSource.myDS.connectionString = Server=localhost;Database=quartz;Uid=quartznet;Pwd=quartznet
quartz.dataSource.myDS.provider = MySql
目前支持以下数据库提供程序:
SqlServer - SQL Server driver for .NET Framework 2.0
OracleODP - Oracle’s Oracle Driver
OracleODPManaged - Oracle’s managed driver for Oracle 11
MySql - MySQL Connector/.NET
SQLite - SQLite ADO.NET Provider
SQLite-Microsoft - Microsoft SQLite ADO.NET Provider
Firebird - Firebird ADO.NET Provider
Npgsql - PostgreSQL Npgsql
如果有最新的驱动程序是可用的,您应该使用最新版本的驱动程序,只需创建一个程序集绑定重定向即可。
如果您的调度程序非常繁忙(即几乎总是执行与线程池大小相同的作业数,那么您应该将数据源中的连接数设置为大约线程池的大小+ 1。 这通常在ADO.NET连接字符串中配置 - 有关详细信息,请参阅驱动程序实现。
“quartz.jobStore.useProperties”配置参数可以设置为“true”(默认为false),以指示 AdoJobStore 所有的值在 JobDataMaps 里面都是以字符串类型存储,因此可以存储为 名称 - 值 对,而不是以序列化的形式存储更复杂的对象在 BLOB 列中。 从长远来看,这样更安全,因为您可以避免将非字符串(non-String)的类型反序列化为BLOB复杂类型时出现的类的版本问题。
配置 AdoJobStore 以将字符串用作 JobDataMap 值(推荐)
quartz.jobStore.useProperties = true
三、总结
好了,今天就写到这里了。大家感觉应该很轻松,内容不多。还是老规矩,我把英文原文地址发出来,英文好的可以直接看英文,理解的会更好。地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/trigger-and-job-listeners.html
不忘初心,继续努力。
Quartz.Net进阶之六:详述 JobStores的更多相关文章
- Quartz.Net进阶之四:CronTrigger 详述
以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...
- Quartz.Net进阶之三:SimpleTrigger详述
以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...
- Quartz.Net进阶之七:QuartzNet其他的功能简述
一.介绍 今天是这个系列的最后一篇文章了,主要功能说的差不多了,我们来看看其他相关的内容.话说回来,虽然是这个系列的最后一篇文章,并不代表Quartz的东西就这么点,学习阶段,就这些了,如果以后有了使 ...
- Net作业调度(三) — Quartz.Net进阶
介绍 前面介绍Quartz.Net的基本用法,但在实际应用中,往往有更多的特性需求,比如记录job执行的执行历史,发邮件等. 阅读目录 Quartz.Net插件 TriggerListener,Job ...
- Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener
一.介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener .JobListener 和 SchedulerL ...
- Quartz.Net进阶之二:关于触发器的更多信息
与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...
- Quartz.Net进阶之一:初识Job作业和触发器
前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...
- Docker进阶之六:网络管理
一.默认网络 安装Docker时会自动创建三个网络:docker network ls 列出网络: # docker network ls NETWORK ID NAME DRIVER SCOPE 5 ...
- kubernetes进阶之六:StatefulSet & DaemonSet
StatefulSet(有状态): StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署,拓展,删除和滚动更新. 在Kubernetes系统中,Pod的管理对象 ...
随机推荐
- 走进HashMap
1.手写实现HashMap 2.解析代码并阐述HashMap1.7到1.8的变化 3.HashMap的遍历方式 4.HashMap与HashSet,Hashtable,ConcurrentHashMa ...
- 【机器学习_9】sklearn
背景 机器学习的重头戏就在sklearn,里面包含各种机器学习算法.希望尽量通过便易上手的方式掌握这个库. 资料 官网--随时查 https://scikit-learn.org/stable/ sk ...
- matlab-双摆仿真
在物理学和数学中,在动力系统领域,双摆是一个摆锤,另一个摆锤连接在其末端,是一个简单的物理系统,具有丰富的动态特性,对初始条件具有很强的敏感性.双摆的运动由一组耦合的常微分方程控制并且是混沌的. 由于 ...
- 关于Vue单页面实现微信分享的Bug
// 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?from= & Timeline= 之类的后缀参数,这就造成了分享出去的链接只能 ...
- DatakeyNames和datakey
DataKey 类用于表示数据绑定控件中某个记录的主键.记录的主键可以由数据源中的一个或多个字段组成.尽管 DataKey 类不是集合,但它可以存储多个键字段值.当调用 DataKey 类的某个构造函 ...
- Linux chattr和lsattr命令使用方法
你是否遇到过文件或目录具有可读写权限,但是使用root用户删除.修改时提示"Operation not permitted"的情况.可能是由于chattr设置了文件的隐藏保护权限导 ...
- Linux一行命令处理批量文件
前言 最好的方法不一定是你最快能想到的.这里提供一种使用sed命令构造命令解决处理批量文件的技巧,供参考. 需求案例1 将当前目录下所有的0_80_91.txt.0_80_92.txt.0_80_93 ...
- 折腾newifi3 d2笔记
1.忘记密码,恢复出厂 通电开机,等正常运行后,长按RESET大约6~8秒,见所有灯开始一起慢闪,可松手等重启就是出厂状态了,出厂IP是:192.168.99.1 2.免拆机刷breed 首先要打开s ...
- 针对Oracle数据库中SCOTT方案的多表查询的一个例子
查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...
- fopen特殊模式r+, w+, a+辨析
fopen模式分两大类,即 TEXT模式:r, w, a, r+, w+, a+ BIN模式:rb, wb, ab, r+b, w+b, a+b 模式 读指针初始位置 写指针初始位置 模式用途 详细说 ...