项目要求:设计一个后台线程,定时清理数据。
使用类: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了。
新闻热点
疑难解答