web.xml监听配置
com.numenzq.mc.service.impl.TimerListenerTimerListener类
public class TimerListener implements ServletContextListener { private Timer timer; private TimerTaskSelf task; /** * @see 销毁 */ @Override public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); }/** * @see 创建 */@Overridepublic void contextInitialized(ServletContextEvent event) { timer = new java.util.Timer(true); task = new TimerTaskSelf(event.getServletContext()); //执行任务指定间隔 timer.scheduleAtFixedRate(task, 0, 1000*60*50); }
}
自定义任务类
package com.numenzq.mc.service.impl;import java.util.Calendar;
import java.util.TimerTask;import javax.servlet.ServletContext;
import org.apache.log4j.Logger;
public class TimerTaskSelf extends TimerTask {
private ServletContext context; public TimerTaskSelf(ServletContext context){ this.context = context; } @Override public void run() { System.out.println(DateUtils.format(DateUtils.currentDate(),"yyyy-MM-dd HH:mm:ss") + " web监听结合定时器应用每次执行2次的问题..."); } }本地tomcat-7.0.12启动, 定时器执行没问题。
部署到服务器,linux,启动tomcat后,每次执行的时候会重复2次执行任务.解决方案:
服务器上项目部署在tomcat的webapps文件下面,conf下的server.xml里面又配置了一句<Context .../> 指向tomcat的webapps下的项目,这样启动的时候web.xml里面的定时监听执行了2次.就是上面 那位哥哥说的 "先在contextInitialized里打印一下看看你的listern进去了几次" ,这样的情况会进去2次.