Java Timer定时器时,每次重复执行了两次任务的解决方案
2016-03-19 12:03
716 查看
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();
}
}
自定义任务类
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里面又配置了一句 指向tomcat的webapps下的项目,这样启动的时候web.xml里面的定时监听执行了2次.就是上面 那位哥哥说的 "先在contextInitialized里打印一下看看你的listern进去了几次" ,这样的情况会进去2次.
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里面又配置了一句 指向tomcat的webapps下的项目,这样启动的时候web.xml里面的定时监听执行了2次.就是上面 那位哥哥说的 "先在contextInitialized里打印一下看看你的listern进去了几次" ,这样的情况会进去2次.
相关文章推荐
- 深入理解Java虚拟机笔记---内存分配与回收策略
- Java培训
- spring mvc mvc:interceptors 零配置(带 urlpattern)
- Java多线程系列--“基础篇”11之 生产消费者问题
- hdu1023 Train Problem II 卡特兰数,JAVA大数类
- java高级特性——动态代理
- 2016蓝桥杯假期任务之《泊松汾酒》
- 详解spring事务属性
- PMD-Java 代码检查工具对 error 和 warning 的配置
- Java IO--创建文件
- 深入理解Java虚拟机笔记---垃圾收集器
- java一周知识回顾
- myeclipse 改java文件后禁止自动重启- 热部署
- Java堆栈详解
- JAVA native method简介
- java -jar 执行 eclipse export 的 jar 包报错处理
- java 高级特性——注解
- java socket 编程
- spring分布式事务应用
- java 对象比较