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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。