Javaweb 定时器功能代码实例
在Java的6.0版本中新增了concurrent包,这个包是用作线程同步的包,提供了很多工具类。
其中定时器就是其中之一。近期在做一个项目,在项目中要实现启动Web服务的同时启动一个任务,要求此任务为守护进程,定时调用一些任务操作代码。在网上搜索相关的实现,综合考虑得出一个解决方案。方案是:使用tomcat服务器的监听器类作守护进程,调用concurrent包提供的定时器,最后在定时器中调用操作实现代码。具体实现类Translator在这里不再给出,将其替换为自己需要的实现类即可。
1.任务类
importjava.util.TimerTask;
importjavax.servlet.ServletContext;
publicclassMyTaskextendsTimerTask{
privateServletContextcontext=null;
publicCleanTpIpTask(ServletContextservletContext){
this.context=servletContext;
}
@Override
publicvoidrun(){
//定时任务逻辑代码
}
}
2.监听类
importjava.util.Calendar;
importjava.util.Date;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassMyTaskListenerimplementsServletContextListener{
privatejava.util.Timertimer=null;
MyTaskmyTask=null;
publicvoidcontextDestroyed(ServletContextEventarg0){
timer.cancel();
}
publicvoidcontextInitialized(ServletContextEventarg0){
Calendarc=Calendar.getInstance();
intyear=c.get(Calendar.YEAR);
intmonth=c.get(Calendar.MONTH);
intday=c.get(Calendar.DAY_OF_MONTH);
c.set(year,month,day,3,0,0);//项目启动当天凌晨3点执行1次,如果已经超过凌晨3点,立刻执行
Datedate=c.getTime();
timer=newjava.util.Timer(true);
intperiod=24*60*60*1000;//执行间隔
if(myTask==null){
myTask=newMyTask(arg0.getServletContext());
timer.schedule(newMyTask(arg0.getServletContext()),date,period);
//timer.schedule(newCleanTpIpTask(arg0.getServletContext()),date);//只执行1次
//timer.schedule(newCleanTpIpTask(arg0.getServletContext()),0,period);//项目启动立刻执行,每隔period毫秒执行1次
}
}
}
3.在web.xml中配置
webservice.MyTaskListener
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。