第六节:JobStore
跟据名称的意思,很可能理解成存放作业的容器,实际上真不是这样,它放的有哪些东东呢?
JobStore我只看了RAMJobStore,里面其实放了Job和Trigger以及它们之间的关系。
让我们先看下有哪些jobStore吧,如下面类图:
其实也就是两类,一个是内存中,一个持久化存储.
RAMJobStore:
RAMJobStore继承至IJobStore接口,里面有几个需要了解到方法,如下:
//------------------对job的操作---------------------------
//把Job存储到内存中的方法, IJobDetail是作业详细信息
void StoreJob(IJobDetailnewJob,bool replaceExisting);
//移除job的方法,JobKey唯一标识一个job,相当于主键
bool RemoveJob(JobKeyjobKey);
bool RemoveJobs(IList<JobKey> jobKeys);
//得到作业的方法
IJobDetail RetrieveJob(JobKeyjobKey);
//检查作业是否存在
bool CheckExists(JobKeyjobKey);
//------------------对Trigger的操作---------------------------
//把触发器存储到内存中的方法
void StoreTrigger(IOperableTriggernewTrigger,bool replaceExisting);
//移除触发器的方法
bool RemoveTrigger(TriggerKeytriggerKey);
bool RemoveTriggers(IList<TriggerKey> triggerKeys);
//检索触发器
IOperableTrigger RetrieveTrigger(TriggerKeytriggerKey);
//检查是否存在
bool CheckExists(JobKeyjobKey);
//请求下一个要触发的触发器
IList<IOperableTrigger>AcquireNextTriggers(DateTimeOffsetnoLaterThan,int maxCount,TimeSpantimeWindow);
调度器会通过适当的时机向RAMJobStore中添加触发器和作业,然后由QuartzSchedulerThread这个线程类去实时的获取下一个时间点要触发的触发器,然后执行触发器相关联的作业,这些代码基本上都在QuartzSchedulerThread类中的Run方法里面。
最后得到要执行的job是由JobRunShell类在线程池中执行完成的,如果想要在线程池中执行,必须继承IThreadRunnable接口,实现Run方法,JobRunShell就是如此。
结语:RAMJobStore其实就是对作业和触发器做了一次聚合,把它们存储到内存中,由调度线程去请求要执行的触发器,然后找到相联的作业去完成执行。我们也可以理解成它就是对作业和触发器的管理维护,由调度器来操作的一个存储的东东。
内部的代码写的还是比较复杂的,主要是对几Dictionary的操作,有兴趣的朋友可以看下。
相关推荐
石英-redis-jobstore 使用 JobStore。 该项目的灵感来自 ,并提供了相似的功能,但有一些主要区别: Redis数据库和密钥前缀是可配置的。 使用Redis。 该库涵盖了该库的所有功能。要求Java 7或更高版本Redis 2.6.12或...
6. 第六课: CronTriggers 7. 第七课: TriggerListeners和JobListeners 8. 第八课: SchedulerListeners 9. 第九课: JobStores 10. 第十课: Configuration, Resource 使用及SchedulerFactory 11. 第十一课: 高级(企业...
这是一个quartz2.2+JobStore开发的持久化到数据库的程序。
NULL 博文链接:https://orange5458.iteye.com/blog/1171035
第六章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第六章. Job 存储和持久化 (第二部分) 内容提要:使用...
动力石英DynamoDB上的 实现使用实现足够好的SDK向后兼容性支持
石英-elasticsearch-jobstore
postgres quatrz初始化sql...#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
NOTE: If "org.quartz.scheduler.batchTriggerAcquisitionMaxCount" is set to > 1, and JDBC JobStore is used, then "org.quartz.jobStore.acquireTriggersWithinLock" must be set to "true" to avoid data ...
# 主要分为scheduler、threadPool、jobStore、dataSource等部分 #============================================================== #Configure Main Scheduler Properties #=====================================...
Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几 点结束,隔多长时间执行,共执行多少...JobStore类:在哪里执行定进程序,可选的有在内存中,在数据库中。
一、关于 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的...Calendar:指定排除的时间点(如排除法定节假日) job Job 是一个接口,只有一个方法 voi
当Triggers的触发时间发生时,获取任务的第一个节点(通过在其上放置一个锁定)是将触发它的节点。 3.当其中一个节点在执行一个或多个作业期间失败时发生故障切换。当节点出现故障时,其他节点会检测到该状况并识别...
本文介绍的是JDBC-Jobstore基于数据库的集群,里面已包含有详细的文档和继承案例,请各位技术追求者门笑纳
本文介绍的是JDBC-Jobstore基于数据库的集群,里面已包含有详细的文档和继承案例,请各位技术追求者门笑纳
quartz-simpledb-jobstore.zip,一个quartz作业存储实现,用于将作业详细信息和触发器持久化到amazon simpledb a quartz作业存储,以在amazon simpledb中持久化作业详细信息和触发器
simple-job-framework 项目介绍 本项目以尽量简洁的方式实现一个任务调度框架,演示一个任务调度框架所使用... + jobstore 任务/触发器信息 + thread 执行线程池 + executor 执行器 + factory 调度器工厂 + util +
2、系统维护:计划一个工作,以便在每个工作日(除节假日以外的所有工作日)晚上11:30将数据库的内容转储到XML文件中。 3、在应用程序内提供提醒服务。 Quartz特征: 一、运行环境 1、Quartz可以嵌入另一个独立应用...
quartz分布式例子代码 直接导入Eclipse工程即可运行。