原文:http://www.cnblogs.com/seaven/archive/2009/07/10/1520536.html
2 )ServletContextListener.
3 )org.springframework.scheduling.timer.ScheduledTimerTask
1 )java.util.Timer
这个方法应该是最常用的,不过这个方法需要手工启动你的任务:
Timer timer = new Timer();
timer.schedule( new ListByDayTimerTask(), 10000 , 86400000 );
这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。
2 )ServletContextListener
这个方法在web容器环境比较方便,这样,在web server启动后就可以
自动运行该任务,不需要手工操作。
将ListByDayListener implements ServletContextListener接口,在
contextInitialized方法中加入启动Timer的代码,在contextDestroyed
方法中加入cancel该Timer的代码;然后在web.xml中,加入listener:
< listener >
< listener - class > com.sysnet.demo.util.MyTimerTask </ listener - class >
</ listener >
3 )org.springframework.scheduling.timer.ScheduledTimerTask
如果你用spring,那么你不需要写Timer类了,在schedulingContext - timer
.xml中加入下面的内容就可以了:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC " -//SPRING//DTD BEAN//EN " " http://www.springframework.org/dtd/spring-beans.dtd " >
< beans >
< bean id = " timer " class = " org.springframework.scheduling.timer.TimerFactoryBean " >
< property name = " scheduledTimerTasks " >
< list >
< ref local = " MyTimeTask1 " />
</ list >
</ property >
</ bean >
< bean id = " MyTimeTask " class = " com.qq.timer.ListByDayTimerTask " />
< bean id = " MyTimeTask1 " class = " org.springframework.scheduling.timer.ScheduledTimerTask " >
< property name = " timerTask " >
< ref bean = " MyTimeTask " />
</ property >
< property name = " delay " >
< value > 10000 </ value >
</ property >
< property name = " period " >
< value > 86400000 </ value >
</ property >
</ bean >
</ beans >
下面给出方法2的一个例子供大家参考:
Java代码:
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyTimerTask implements ServletContextListener{
private Timer timer = null ;
@Override
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
timer.cancel();
event.getServletContext().log( " 定时器销毁 " );
System.out.println( " 停止备份程序…… " );
}
@Override
public void contextInitialized(ServletContextEvent event) {
// 在这里初始化监听器,在tomcat启动的时候监听器启动,考试,大提示可以在这里实现定时器功能
timer = new Timer( true );
event.getServletContext().log( " 定时器已启动 " ); // 添加日志,可在tomcat日志中查看到
timer.schedule( new exportHistoryBean(event.getServletContext()), 0 , 5 * 1000 ); // 调用 exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
}
}
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class exportHistoryBean extends TimerTask
{
private static final int C_SCHEDULE_HOUR = 0 ;
private static boolean isRunning = false ;
private ServletContext context = null ;
public exportHistoryBean(ServletContext context)
{
this .context = context;
}
@Override
public void run()
{
Calendar c = Calendar.getInstance();
if ( ! isRunning)
{
if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
{
isRunning = true ;
context.log( " 开始执行指定任务 " );
isRunning = false ;
context.log( " 指定任务执行结束 " );
}
else
{
context.log( " 上一次任务执行还未结束 " );
}
}
}
}
web.xml里加入一下代码:
< listener >
< listener - class > com.sysnet.demo.util.MyTimerTask </ listener - class >
</ listener >