在Web工程中实现定时器
因为在项目启动时,定时器就要启动计时,并在规定的时间内触发相应的任务,所以定时器的生命期就是整个项目的生命期,那么最好的方式就是使用监听器了,项目启动后,就会在整个项目的生命周期中处于监听状态。
现在来实现一个简单的定时器
首先编写一个监听器TimerListener
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
/**
*
* @author Administrator
*
*/
public class TimerListener extends HttpServlet implements ServletContextListener {
private static final long serialVersionUID = 1L;
private Timer timer = null;
public TimerListener() {
}
/*
* 销毁
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent event) {
this.timer.cancel();
event.getServletContext().log("定时器销毁");
}
/*
* 初始启动
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent event) {
this.timer = new Timer();
event.getServletContext().log("定时器启动");
//参数1指MyTimerTask()需要调动执行的任务,参数2为无延迟,参数3为每小时触发一次
this.timer.schedule(new MyTimerTask(), 0, 60*60*1000 );
event.getServletContext().log("定时器任务启动");
}
}
完成监听器的编写后,接下来实现定时器的编写,定时器中执行的任务就不写了,只是打印一行符合吧
import java.util.TimerTask;
import javax.servlet.ServletContext;
/**
*
* @author Administrator
*
*/
public class MyTimerTask extends TimerTask {
private ServletContext servletContext = null;
private static boolean isRunning = false;
public MyTimerTask(){
}
public MyTimerTask(ServletContext servletContext){
this.servletContext = servletContext;
}
@Override
public void run() {
if(!isRunning){
isRunning = true;
servletContext.log("开始执行定时任务");
//执行相应任务
System.out.println("------------------->");
servletContext.log("定时任务执行完成");
isRunning = false;
}else{
servletContext.log("上传定时任务为完成");
}
}
}
OK,完成,最后记得再配置文件中添加监听器
<listener>
<listener-class>packagename.TimerListener</listener-class>
</listener>