BaseTask extends java.util.TimerTask { //用户只需要实现这个方面,把自己的任务放到这里 public void run(){ } }
下面让我们来看看spring的源代码:
Java代码:
/* * Copyright 2002-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
package org.springframework.scheduling.timer;
import java.util.TimerTask;
/** * JavaBean that describes a scheduled TimerTask, consisting of * the TimerTask itself (or a Runnable to create a TimerTask for) * and a delay plus period. Period needs to be specified; * there is no point in a default for it. * *
The JDK Timer does not offer more sophisticated scheduling
* options such as cron expressions. Consider using Quartz for * such advanced needs. * *
Note that Timer uses a TimerTask instance that is shared
* between repeated executions, in contrast to Quartz which * instantiates a new Job for each execution. * * @author Juergen Hoeller * @since 19.02.2004 * @see java.util.TimerTask * @see java.util.Timer#schedule(TimerTask, long, long) * @see java.util.Timer#scheduleAtFixedRate(TimerTask, long, long) */ public class ScheduledTimerTask {
private TimerTask timerTask;
private long delay = 0 ;
private long period = 0 ;
private boolean fixedRate = false ;
/** * Create a new ScheduledTimerTask, * to be populated via bean properties. * @see #setTimerTask * @see #setDelay * @see #setPeriod * @see #setFixedRate */ public ScheduledTimerTask() { }
/** * Create a new ScheduledTimerTask, with default * one-time execution without delay. * @param timerTask the TimerTask to schedule */ public ScheduledTimerTask(TimerTask timerTask) { this .timerTask = timerTask; }
/** * Create a new ScheduledTimerTask, with default * one-time execution with the given delay. * @param timerTask the TimerTask to schedule * @param delay the delay before starting the task for the first time (ms) */ public ScheduledTimerTask(TimerTask timerTask, long delay) { this .timerTask = timerTask; this .delay = delay; }
/** * Create a new ScheduledTimerTask. * @param timerTask the TimerTask to schedule * @param delay the delay before starting the task for the first time (ms) * @param period the period between repeated task executions (ms) * @param fixedRate whether to schedule as fixed-rate execution */ public ScheduledTimerTask(TimerTask timerTask, long delay, long period,
boolean fixedRate) { this .timerTask = timerTask; this .delay = delay; this .period = period; this .fixedRate = fixedRate; }
/** * Create a new ScheduledTimerTask, with default * one-time execution without delay. * @param timerTask the Runnable to schedule as TimerTask */ public ScheduledTimerTask(Runnable timerTask) { setRunnable(timerTask); }
/** * Create a new ScheduledTimerTask, with default * one-time execution with the given delay. * @param timerTask the Runnable to schedule as TimerTask * @param delay the delay before starting the task for the first time (ms) */ public ScheduledTimerTask(Runnable timerTask, long delay) { setRunnable(timerTask); this .delay = delay; }
/** * Create a new ScheduledTimerTask. * @param timerTask the Runnable to schedule as TimerTask * @param delay the delay before starting the task for the first time (ms) * @param period the period between repeated task executions (ms) * @param fixedRate whether to schedule as fixed-rate execution */ public ScheduledTimerTask(Runnable timerTask, long delay, long period,
boolean fixedRate) { setRunnable(timerTask); this .delay = delay; this .period = period; this .fixedRate = fixedRate; }
/** * Set the Runnable to schedule as TimerTask. * @see DelegatingTimerTask */ public void setRunnable(Runnable timerTask) { this .timerTask = new DelegatingTimerTask(timerTask); }
/** * Set the TimerTask to schedule. */ public void setTimerTask(TimerTask timerTask) { this .timerTask = timerTask; }
/** * Return the TimerTask to schedule. */ public TimerTask getTimerTask() { return timerTask; }
/** * Set the delay before starting the task for the first time, * in milliseconds. Default is 0, immediately starting the * task after successful scheduling. */ public void setDelay( long delay) { this .delay = delay; }
/** * Return the delay before starting the job for the first time. */ public long getDelay() { return delay; }
/** * Set the period between repeated task executions, in milliseconds. * Default is 0, leading to one-time execution. In case of a positive * value, the task will be executed repeatedly, with the given interval * inbetween executions. *
Default is "false": The timer will automatically get cancelled on
* destruction of this FactoryBean. Hence, if the application shuts down, * tasks will by default finish their execution. Specify "true" for eager * shutdown of threads that execute tasks. * @see java.util.Timer#Timer(boolean) */ public void setDaemon( boolean daemon) { this .daemon = daemon; }
public void afterPropertiesSet() { logger.info( "Initializing Timer" ); this .timer = createTimer( this .daemon);
// Register all ScheduledTimerTasks. if ( this .scheduledTimerTasks != null ) { for ( int i = 0 ; i < this .scheduledTimerTasks.length; i++) { ScheduledTimerTask scheduledTask = this .scheduledTimerTasks[i]; if (scheduledTask.getPeriod() > 0 ) { // repeated task execution if (scheduledTask.isFixedRate()) { this .timer.scheduleAtFixedRate( scheduledTask.getTimerTask(), scheduledTask.getDelay(),
scheduledTask.getPeriod()); } else { this .timer.schedule( scheduledTask.getTimerTask(), scheduledTask.getDelay(),
/** * Create a new Timer instance. Called by afterPropertiesSet. * Can be overridden in subclasses to provide custom Timer subclasses. * @param daemon whether to create a Timer that runs as daemon thread * @return a new Timer instance * @see #afterPropertiesSet() * @see java.util.Timer#Timer(boolean) */ protected Timer createTimer( boolean daemon) { return new Timer(daemon); }
public Object getObject() { return this .timer; }
public Class getObjectType() { return Timer. class ; }
public boolean isSingleton() { return true ; }
/** * Cancel the Timer on bean factory shutdown, stopping all scheduled tasks. * @see java.util.Timer#cancel() */ public void destroy() { logger.info( "Cancelling Timer" ); this .timer.cancel(); } }