<!-- 定时监听 -->
<listener>
<listener-class>com.numenzq.mc.service.impl.TimerListener</listener-class>
</listener>
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次执行任务.
(间隔50分钟执行一次,可每到50分钟就会打印2条信息.)
望高手,帮忙找下原因. 坐等..
6 个解决方案
#1
先在contextInitialized里打印一下看看你的listern进去了几次
#2
本地contextInitialized listern 进入了1次. 正常
服务器上 启动tomcat的时候,contextInitialized 进入了2次. 相隔9秒左右. 是什么原因呢?
服务器上 启动tomcat的时候,contextInitialized 进入了2次. 相隔9秒左右. 是什么原因呢?
#3
搜索这样的问题,发现有的和虚拟目录有关,楼主这个不知道有没有配置虚拟目录?
http://bbs.csdn.net/topics/270068464
http://bbs.csdn.net/topics/340002087
http://bbs.csdn.net/topics/270068464
http://bbs.csdn.net/topics/340002087
#4
找到了原因,服务器上项目部署在tomcat的webapps文件下面,conf下的server.xml里面又配置了一句<Context .../> 指向tomcat的webapps下的项目,这样启动的时候web.xml里面的定时监听执行了2次.就是上面 那位哥哥说的 "先在contextInitialized里打印一下看看你的listern进去了几次" ,这样的情况会进去2次.
问题原因找到了.新的问题出来了tomcat conf下的server.xml配置了<Context .../> 是运维的同事想要给项目分个域名. 可以在不修改定时器实现方式,不删除<Context .../>的情况下提供解决方案吗.
问题原因找到了.新的问题出来了tomcat conf下的server.xml配置了<Context .../> 是运维的同事想要给项目分个域名. 可以在不修改定时器实现方式,不删除<Context .../>的情况下提供解决方案吗.
#5
<Host name="www.baidu.com appBase="E:\Projects"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false"
deployXML="false" deployOnStartup="false">
<Context path="" docBase="webapps"
reloadable="false" crossContext="false">
</Context>
</Host>
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false"
deployXML="false" deployOnStartup="false">
<Context path="" docBase="webapps"
reloadable="false" crossContext="false">
</Context>
</Host>
#6
我的定时任务偶尔会出现重复,请问楼主遇到过吗?
#1
先在contextInitialized里打印一下看看你的listern进去了几次
#2
本地contextInitialized listern 进入了1次. 正常
服务器上 启动tomcat的时候,contextInitialized 进入了2次. 相隔9秒左右. 是什么原因呢?
服务器上 启动tomcat的时候,contextInitialized 进入了2次. 相隔9秒左右. 是什么原因呢?
#3
搜索这样的问题,发现有的和虚拟目录有关,楼主这个不知道有没有配置虚拟目录?
http://bbs.csdn.net/topics/270068464
http://bbs.csdn.net/topics/340002087
http://bbs.csdn.net/topics/270068464
http://bbs.csdn.net/topics/340002087
#4
找到了原因,服务器上项目部署在tomcat的webapps文件下面,conf下的server.xml里面又配置了一句<Context .../> 指向tomcat的webapps下的项目,这样启动的时候web.xml里面的定时监听执行了2次.就是上面 那位哥哥说的 "先在contextInitialized里打印一下看看你的listern进去了几次" ,这样的情况会进去2次.
问题原因找到了.新的问题出来了tomcat conf下的server.xml配置了<Context .../> 是运维的同事想要给项目分个域名. 可以在不修改定时器实现方式,不删除<Context .../>的情况下提供解决方案吗.
问题原因找到了.新的问题出来了tomcat conf下的server.xml配置了<Context .../> 是运维的同事想要给项目分个域名. 可以在不修改定时器实现方式,不删除<Context .../>的情况下提供解决方案吗.
#5
<Host name="www.baidu.com appBase="E:\Projects"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false"
deployXML="false" deployOnStartup="false">
<Context path="" docBase="webapps"
reloadable="false" crossContext="false">
</Context>
</Host>
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false"
deployXML="false" deployOnStartup="false">
<Context path="" docBase="webapps"
reloadable="false" crossContext="false">
</Context>
</Host>
#6
我的定时任务偶尔会出现重复,请问楼主遇到过吗?