稍微往quartz里面看了下代码在加上自己的揣测,大概梳理下它的执行过程,是如何调度,如何执行任务的。
执行过程:
调度器初始化配置,比如JobStore,线程池,轮循线程,作业执行环境等
如果有任务来了就把任务扔到JobStore中,有另外的线程会根据触发机制来轮循JobStore中的job,如果满足执行条件就把它扔到线程池中执行,这样一次执行作业的任务就完成了。
其中
调度器类比如有:
Quartz.Impl. StdScheduler(标准调度器)
Quartz.Impl. RemoteScheduler(远程调度器)
线程池有:
Quartz.Simpl. SimpleThreadPool
执行job的类有:
Quartz.Core.JobRunShell(运行我们写好的job的具体类,具体由线程池来调用执行)
Quartz.Core. QuartzScheduler
Quartz.Core.QuartzSchedulerThread等
存放job的容器有:
Quartz.Simpl.RAMJobStore(内存存储)和持久化的存储(略)
触发器有:
Quartz.Impl.Triggers.CalendarIntervalTriggerImpl
Quartz.Impl.Triggers.SimpleTriggerImpl
Quartz.Impl.Triggers.DailyTimeIntervalTriggerImpl
然后把上面这些类套到执行过程中,如下:
首先通过调度工厂初始化简单的SimpleThreadPool,RAMJobStore最后得到StdScheduler,在通过QuartzScheduler把轮循线程QuartzSchedulerThread运行起来,当有带有触发器(SimpleTriggerImpl)的job进来时就扔到RAMJobStore中,如果满足执行条件该job就会被扔到SimpleThreadPool中由JobRunShell完成执行,这样一次执行作业的任务就完成了。
总结:了解了Quartz的整个执行过程对继续往下看来说是很重要的,但是上面好多地方都非常模糊的是由自己推测的,好多是不准确的,不管怎么今天接触到了Quartz 中大部分重要的类。