第六节:Quzrtz JobStore

第六节:JobStore

 

跟据名称的意思,很可能理解成存放作业的容器,实际上真不是这样,它放的有哪些东东呢?

JobStore我只看了RAMJobStore里面其实放了JobTrigger以及它们之间的关系。

 

让我们先看下有哪些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的操作,有兴趣的朋友可以看下。

猜你喜欢

转载自zxb1985.iteye.com/blog/1841382