在做web开发的时候,经常需要在一定的时间去更新某些东西,或是加载某些东西,这就用到了定时器。
当Web工程启动时,定时器能自动开始计时,在整个Web工程的生命期里,定时器每过一段时间就执行一次,所以考虑定时器存放的位置。
定时器肯定不能不能简单的存在于单个Servlet或JavaBean中,必须能让定时器宿主的存活期为整个Web工程生命期,在工程启动时能自动加载运行。结合这两点,跟 Servlet上下文有关的侦听器就最合适不过了,通过在工程的配置文件中加以合理配置,会在工程启动时自动运行,并在整个工程生命期中处于监听状态。
下面就Servlet侦听器结合Java定时器来讲述整个实现过程:
//这是我的定时器类,用来定时执行某段任务;
package common;
import java.util.Timer;
public class F30Timer {
public Timer timer;
public void timerStart() {
timer = new Timer();
timer.schedule(new F30TimerTask(), 0, 60000);
}
public void timerStop() {
if (timer != null) {
timer.cancel();
}
}
}
//这是执行任务的类,即每隔一段时间要做的事情在这里
package common;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
public class F30TimerTask extends TimerTask {
public void run() {
System.out.println("$$$$$ Run task $$$$$");
}
}
//以下是出发定时操作的类,该类继承了ServletContextListener
package common;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class F30TimerListener implements ServletContextListener {
private F30Timer mytimer = new F30Timer();
public void contextInitialized(ServletContextEvent event) {
mytimer.timerStart();
}
public void contextDestroyed(ServletContextEvent event) {
mytimer.timerStop();
}
}
然后在web.xml里部署一下,即可在程序启动后运行定时器了!
<listener>
<listener-class>common.F30TimerListener </listener-class>
</listener>
没有评论:
发表评论