zoukankan      html  css  js  c++  java
  • Java Timer定时器时,每次重复执行了两次任务的解决方案

    web.xml监听配置

    com.numenzq.mc.service.impl.TimerListener

    TimerListener类
    public class TimerListener implements ServletContextListener {
    private Timer timer;
    private TimerTaskSelf task;
    /**
    * @see 销毁
    */
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    timer.cancel();
    }

    /**
     * @see 创建
     */
    @Override
    public 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次.

  • 相关阅读:
    iphone数据存储之-- Core Data的使用
    Object-c 中的数据类型
    Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
    iOS开发系列--Objective-C之KVC、KVO
    【C语言】-返回指针的函数与指向函数的指针
    【C语言】-指向一维数组元素的指针
    【C语言】-指针和字符串
    【C语言】-指针
    OC总结 【OC基础语法相关知识】
    swift与OC混编之调用函数
  • 原文地址:https://www.cnblogs.com/cosiray/p/5294760.html
Copyright © 2011-2022 走看看