Package quartz-core
org.quartz.QuartzScheduler.java
类 QuartzScheduler
方法:
1. 构造函数
public QuartzScheduler(QuartzSchedulerResources resources, long idleWaitTime, @Deprecated long dbRetryInterval)
schedThreadExecutor.execute(this.schedThread);
addInternalJobListener(jobMgr);
2. initialize()
bind();
把scheduler绑定到一个RMI registry
registerJMX();
把scheduler绑定到JMSServer
3. start()
所有未被触发的trigger会传给一个triggerlistener
notifySchedulerListenersStarting();
notifySchedulerListenersStarted();
4. startDelayed()
public void startDelayed(final int seconds) throws SchedulerException { if (shuttingDown || closed) { throw new SchedulerException( "The Scheduler cannot be restarted after shutdown() has been called."); } Thread t = new Thread(new Runnable() { public void run() { try { Thread.sleep(seconds * 1000L); } catch(InterruptedException ignore) {} try { start(); } catch(SchedulerException se) { getLog().error("Unable to start secheduler after startup delay.", se); } } }); t.start(); }
5. standby()
暂停
resources.getJobStore().schedulerPaused(); schedThread.togglePause(true); getLog().info( "Scheduler " + resources.getUniqueIdentifier() + " paused."); notifySchedulerListenersInStandbyMode();其中,
public boolean isInStandbyMode() { return schedThread.isPaused(); }
6. shundown()
public void shutdown(boolean waitForJobsToComplete) {
standby(); schedThread.halt(waitForJobsToComplete); notifySchedulerListenersShuttingdown();
resources.getThreadPool().shutdown(waitForJobsToComplete);
7. scheduleJob()
把job加到scheduler中,并关联相应的trigger。
public Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException
OperableTrigger trig = (OperableTrigger)trigger; if (trigger.getJobKey() == null) { trig.setJobKey(jobDetail.getKey()); } else if (!trigger.getJobKey().equals(jobDetail.getKey())) { throw new SchedulerException( "Trigger does not reference given job!"); } trig.validate();
resources.getJobStore().storeJobAndTrigger(jobDetail, trig); notifySchedulerListenersJobAdded(jobDetail); notifySchedulerThread(trigger.getNextFireTime().getTime()); notifySchedulerListenersSchduled(trigger);