首页 > 学院 > 开发设计 > 正文

Servlet调用Timer完成定时任务

2019-11-08 01:38:01
字体:
来源:转载
供稿:网友

项目要求:设计一个后台线程,定时清理数据。

使用类:TimerTask

前期学习

java 8 API

public abstract class TimerTaskextends Objectimplements RunnableTimerTask 是一个实现了Runnable接口的抽象类,是被Timer类调度使用的抽象类。

Timer类使用TimerTask有如下方法:

项目代码:

1、设计TimerTask类,在web启动时调用。

import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class TimerTask implements ServletContextListener{			PRivate Timer timer;  //定义定时器Timer	public static final long DELAY = 0;	//定义延迟时间 long=0	public static final long PERIOD_MIN = 60000;//每分钟的毫秒数	public static final long PERIOD_DAY = 2*60*PERIOD_MIN;//设定运作周期为每2小时一次,即2*60*每分钟的毫秒数		public void contextInitialized(ServletContextEvent event){ //在web启动时初始化此任务						timer=new Timer("数据清理",true);				timer.schedule(new TimerTaskRun(), DELAY, PERIOD_DAY);				}	public void contextDestroyed(ServletContextEvent event){		timer.cancel();// web结束时销毁定时器!	}	}

2、实现TimerTaskRun类,覆写run方法。

import com.sun.istack.internal.logging.Logger;import com.test.database.DBManager;public class TimerTaskRun extends java.util.TimerTask {			private static Logger logger = Logger.getLogger(TimerTaskRun.class); 	private static boolean isRunning = false; 	 	 public void run(){		 		 if(!isRunning){			 isRunning=true;			 logger.info("TimerTaskStart!");//开始执行任务		 			 //执行代码。。。。。。。。。			 			 			 logger.info("TimerTaskEnd.");//任务完成			 isRunning=false;		 }else{			 logger.info("TimerTaskWait...");//上次任务还未结束			 		 }		 	 }}

遇到的问题:

1、使用timer的schedule的时候,一直报错,说类型不匹配。

我的代码是继承了TimerTask抽象类的,而且也覆写了run,怎么会错呢.....

后来查啊查,看到有继承的时候是这样写的:

然后发现....不报错了.....后来想了想,额,没导java.util包

2、getLog方法一直报错:the method getLog(String) is undefined....

开始用的是这个代码:↓

private  Log log = LogFactory.getLog(this.getClass().getName()); 

然后第一次查错的时候,是觉得没有导包,这个包tomcat里面没有,我从网上下载了一个commons-logging-1.0.4.jar,网上说log就是用这个网,logger是用什么log4的jar包。

然后重点来了,导完还是错。

我就随意的把log写成了logger,居然自动补全了后面的函数....然后就顺着eclipse的补全函数重写了一遍.....

说好的log对应commons-logging-1.0.4.jar呢......╭(╯^╰)╮

3、log.debug()方法报错。

按理说,log.debug(); log.info(); log.warn(); log.error("); 这四个都是可以的。

但是,就是不补全debug方法。科科。 所以只能用info了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表