quartz源码分析

来源:互联网 发布:java电商项目面试技巧 编辑:程序博客网 时间:2024/05/21 17:17

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);




0 0
原创粉丝点击