項目要求:設計一個后臺線程,定時清理數據。
使用類: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了。
新聞熱點
疑難解答