• 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次.

  • 相关阅读:
    leetcode167 Two Sum II
    leetcode18 4Sum
    leetcode15 three sum
    leetcode-1-Two Sum
    SQL优化——select
    Hadoop 集群搭建
    虚拟机中的两台主机怎么相互拷贝文件
    doker5
    docker4
    docker3
  • 原文地址:https://www.cnblogs.com/cosiray/p/5294760.html
Copyright © 2020-2023  润新知