日期:2014-05-19  浏览次数:20605 次

tomcat启动时执行一个任务应该怎么配置?
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TestListener implements ServletContextListener {
  private Timer timer = null;

  public void contextInitialized(ServletContextEvent event) {
  timer = new Timer(true);
  timer.schedule(new TestTimer(), 0, 86400000);//milliseconds
  }

  public void contextDestroyed(ServletContextEvent event) {
  timer.cancel();
  }
}

------------------------------------------

import java.util.TimerTask;

public class TestTimer extends TimerTask {
  public void run() {
  // do something ...
  }
}

------------------------------------------

web.xml:

<listener >
<listener-class >test.TestListener </listener-class >
</listener > 


我用这种方法配了,也成功了,不过有点小问题,就是这个任务本来应该执行一次创建一个timer,但是实际上创建了好几个timer,请问这是为什么啊?请高手指教

另外,timer定时1分钟,实际上非常不准,有时候2分钟都不执行一次,是我个人的问题还是本来就有这毛病?

------解决方案--------------------
我用这种方法配了,也成功了,不过有点小问题,就是这个任务本来应该执行一次创建一个timer,但是实际上创建了好几个timer,请问这是为什么啊?请高手指教

另外,timer定时1分钟,实际上非常不准,有时候2分钟都不执行一次,是我个人的问题还是本来就有这毛病?

本来就是非常不准

不是你的问题

我做过定时的业务

用的quartz组件

你下载quartz-1.6.0.zip里面有帮助文档的
------解决方案--------------------
如果要精确定时的话,用timer.scheduleAtFixedRate方法,timer.schedule方法是定时加执行的延迟,所以肯定超过定时的时间.