1. 程式人生 > >在WEB應用下實現定時任務的簡便方法

在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(); // 定時器銷燬
 }
}

第二步:建立一個時間任務類
以下是引用片段:
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中新增一個監聽器

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

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