程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java:Web應用下實現定時任務的簡便方法

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

編輯:JAVA編程入門知識

  在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服務器啟動的時候,任務也被啟動,並且會周期性的執行


    
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved