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

工程師WWW發表於2015-10-29

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

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

  第一步:建立一個任務管理類,實現ServletContextListener 介面

  1. 以下是引用片段:   
  2. public class TaskManager implements ServletContextListener {   
  3.  /**  
  4.   * 每天的毫秒數  
  5.   */  
  6.  public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY;   
  7.  /**  
  8.   * 一週內的毫秒數  
  9.   */  
  10.  public static final long PERIOD_WEEK = PERIOD_DAY * 7;   
  11.  /**  
  12.   * 無延遲  
  13.   */  
  14.  public static final long NO_DELAY = 0;   
  15.  /**  
  16.   * 定時器  
  17.   */  
  18.  private Timer timer;   
  19.  /**  
  20.   * 在Web應用啟動時初始化任務  
  21.   */  
  22.  public void contextInitialized(ServletContextEvent event) {   
  23.         //定義定時器   
  24.   timer = new Timer("資料庫表備份",true);    
  25.   //啟動備份任務,每月(4個星期)執行一次   
  26.   timer.schedule(new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4);   
  27. //  timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);   
  28.  }   
  29.  /**  
  30.   * 在Web應用結束時停止任務  
  31.   */  
  32.  public void contextDestroyed(ServletContextEvent event) {   
  33.   timer.cancel(); // 定時器銷燬   
  34.  }   
  35. }  

 

 

第二步:建立一個時間任務類
  1. 以下是引用片段:   
  2. public class BackUpTableTask extends TimerTask {      
  3.         private static boolean isRunning = false;    
  4.        public void run() {    
  5.                   if (!isRunning) {    
  6.                               isRunning = true;    
  7.                                System.out.println("開始執行任務..."); //開始任務    
  8.                                   //working  add what you want to do    
  9.                               System.out.println("執行任務完成..."); //任務完成    
  10.                               isRunning = false;    
  11.                     } else {    
  12.                              System.out.println("上一次任務執行還未結束..."); //上一次任務執行還未結束   
  13.                     }    
  14.        }    
  15. }  

 

  第三步:在web.xml中新增一個監聽器

  1.  <listener>  
  2.   <listener-class>***.TaskManager</listener-class>  
  3.   <description>要定期執行的任務</description>  //報錯就刪除
  4.  </listener>  

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

相關文章