JAVA技巧(Java定时执行任务的实现方法)2009年02月07日 星期六10:36定时执行任务的三种方法:1)java.util.Timer.2)ServletContextListener.3)org.springframework.scheduling.timer.ScheduledTimerTask1)java.util.Timer
这个方法应该是最常用的,不过这个方法需要手工启动你的任务:
Timer timer=newTimer();
timer.schedule(newListByDayTimerTask(),10000,86400000);
这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。2)ServletContextListener
这个方法在web容器环境比较方便,这样,在web server启动后就可以
自动运行该任务,不需要手工操作。
将ListByDayListenerimplementsServletContextListener接口,在
contextInitialized方法中加入启动Timer的代码,在contextDestroyed
方法中加入cancel该Timer的代码;然后在web.xml中,加入listener:com.sysnet.demo.util.MyTimerTask3)org.springframework.scheduling.timer.ScheduledTimerTask
如果你用spring,那么你不需要写Timer类了,在schedulingContext-timer
.xml中加入下面的内容就可以了:<?xml version="1.0"encoding="UTF-8"?>beans PUBLIC"-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">1000086400000下面给出方法2的一个例子供大家参考:
Java代码:importjava.util.Timer;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;publicclassMyTimerTaskimplementsServletContextListener{privateTimer timer=null;
@OverridepublicvoidcontextDestroyed(ServletContextEvent event) {//TODO Auto-generated method stubtimer.cancel();
event.getServletContext().log("定时器销毁");
System.out.println("停止备份程序……");
}
@OverridepublicvoidcontextInitialized(ServletContextEvent event) {//在这里初始化监听器,在tomcat启动的时候监听器启动,考试,大提示可以在这里实现定时器功能timer=newTimer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到timer.schedule(newexportHistoryBean(event.getServletContext()),0,5*1000);//调用 exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;}
}importjava.util.Calendar;importjava.util.TimerTask;importjavax.servlet.ServletContext;publicclassexportHistoryBeanextendsTimerTask
{privatestaticfinalintC_SCHEDULE_HOUR=0;privatestaticbooleanisRunning=false;privateServletContext context=null;publicexportHistoryBean(ServletContext context)
{this.context=context;
}
@Overridepublicvoidrun()
{
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里加入一下代码:com.sysnet.demo.util.MyTimerTask