- public class QuartzScheduler
- implements RemotableQuartzScheduler
- {
- public Date scheduleJob(JobDetail jobDetail, Trigger trigger)
- throws SchedulerException
- {
- validateState();
- if(jobDetail == null)
- throw new SchedulerException("JobDetail cannot be null");
- if(trigger == null)
- throw new SchedulerException("Trigger cannot be null");
- if(jobDetail.getKey() == null)
- throw new SchedulerException("Job's key cannot be null");
- if(jobDetail.getJobClass() == null)
- throw new SchedulerException("Job's class cannot be null");
- //包装触发器
- OperableTrigger trig = (OperableTrigger)trigger;
- if(trigger.getJobKey() == null)
- //设置触发器jobKey
- trig.setJobKey(jobDetail.getKey());
- else
- if(!trigger.getJobKey().equals(jobDetail.getKey()))
- throw new SchedulerException("Trigger does not reference given job!");
- trig.validate();
- Calendar cal = null;
- if(trigger.getCalendarName() != null)
- cal = resources.getJobStore().retrieveCalendar(trigger.getCalendarName());
- Date ft = trig.computeFirstFireTime(cal);
- if(ft == null)
- {
- throw new SchedulerException((new StringBuilder()).append("Based on configured schedule, the given trigger '").append(trigger.getKey()).append("' will never fire.").toString());
- } else
- {
- //存储job and trriger到jobStrore
- resources.getJobStore().storeJobAndTrigger(jobDetail, trig);
- //添加jobDetail到调度监听器
- notifySchedulerListenersJobAdded(jobDetail);
- //通知调度器下一刻调度时间
- notifySchedulerThread(trigger.getNextFireTime().getTime());
- //添加trigger到调度监听器
- notifySchedulerListenersSchduled(trigger);
- return ft;
- }
- //添加jobDetail
- public void notifySchedulerListenersJobAdded(JobDetail jobDetail)
- {
- List schedListeners = buildSchedulerListenerList();
- for(Iterator i$ = schedListeners.iterator(); i$.hasNext();)
- {
- SchedulerListener sl = (SchedulerListener)i$.next();
- try
- {
- sl.jobAdded(jobDetail);
- }
- catch(Exception e)
- {
- getLog().error("Error while notifying SchedulerListener of JobAdded.", e);
- }
- }
- }
- //获取调度监听器
- private List buildSchedulerListenerList()
- {
- List allListeners = new LinkedList();
- allListeners.addAll(getListenerManager().getSchedulerListeners());
- allListeners.addAll(getInterna
Quartzs的job,trriger监听器源码分析
最新推荐文章于 2024-04-14 14:03:54 发布
本文深入剖析了QuartzScheduler的源码,重点讲解了如何调度Job和Trigger,包括scheduleJob方法的实现、触发器的校验和存储,以及调度监听器的使用。在调度过程中,Quartz会确保Job和Trigger的正确关联,并通过监听器通知调度状态的变化,如Job的添加和调度。此外,还介绍了内部调度器、监听管理器和信号器的重要角色。
摘要由CSDN通过智能技术生成