Java:Web應用下實現定時任務的簡便方法

在WEB應用下實現定時任務的簡便方法

  在web方式下,如果我們要實現定期執行某些任務的話,除了用quartz等第三方開源工具外,我們可以使用Timer和TimeTask來完成指定的定時任務:

     第一步:創建一個任務管理類,實現ServletContextListener 接口

以下是引用片段:    public   class  TaskManager  implements  ServletContextListener {      /**     * 每天的毫秒數     */      public   static   final   long  PERIOD_DAY = DateUtils.MILLIS_IN_DAY;      /**     * 一週內的毫秒數     */      public   static   final   long  PERIOD_WEEK = PERIOD_DAY *  7 ;      /**     * 無延遲     */      public   static   final   long  NO_DELAY =  0 ;      /**     * 定時器     */      private  Timer timer;      /**     * 在Web應用啓動時初始化任務     */      public   void  contextInitialized(ServletContextEvent event) {             //定義定時器      timer =  new  Timer( "數據庫表備份" , true );        //啓動備份任務,每月(4個星期)執行一次      timer.schedule( new  BackUpTableTask(),NO_DELAY, PERIOD_WEEK *  4 );    //  timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);     }      /**     * 在Web應用結束時停止任務     */      public   void  contextDestroyed(ServletContextEvent event) {      timer.cancel();  // 定時器銷燬     }    }  

 

 

java 代碼
以下是引用片段:    public   class  BackUpTableTask  extends  TimerTask {              private   static  Log log = LogFactory.getLog(BackUpTableTask. class );              private   static   boolean  isRunning =  false ;             public   void  run() {                        if  (!isRunning) {                                   isRunning =  true ;                                    log.debug( "開始執行任務..." );  //開始任務                                        //working  add what you want to do                                   log.debug( "執行任務完成..." );  //任務完成                                   isRunning =  false ;                         }  else  {                                  log.debug( "上一次任務執行還未結束..." );  //上一次任務執行還未結束                         }            }     }  

   第二步:創建一個時間任務類

 

以下是引用片段:
public class BackUpTableTask extends TimerTask {
 private static Log log = LogFactory.getLog(BackUpTableTask.class);
 private static boolean isRunning = false;
 public void run() {
  if (!isRunning) {
   isRunning = true;
   log.debug("開始執行任務..."); //開始任務
   //working  add what you want to do
   log.debug("執行任務完成..."); //任務完成
   isRunning = false;
  } else {
   log.debug("上一次任務執行還未結束..."); //上一次任務執行還未結束
  }
 }
}


  第三步:在web中添加一個監聽器

xml 代碼

 

以下是引用片段:     < listener >      < listener-class > ***.TaskManager</ listener-class >      < description > 要定期執行的任務</ description >     </ listener >   


 

  那麼在web服務器啓動的時候,任務也被啓動,並且會週期性的執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章