隨筆-86  評論-33  文章-0  trackbacks-0
          Java定時器(java.util.Timer)有定時觸發計劃任務的功能,通過配置定時器的間隔時間,在某一間隔時間段之后會自動有規律的調用預先所安排的計劃任務(java.util.TimerTask)。另外,由于我們希望當Web工程啟動時,定時器能自動開始計時,在整個Web工程的生命期里,定時器能在每晚深夜觸發一次報表計算引擎。因此定時器的存放位置也值得考查,不能簡單的存在于單個Servlet或JavaBean中,必須能讓定時器宿主的存活期為整個Web工程生命期,在工程啟動時能自動加載運行。結合這兩點,跟Servlet上下文有關的偵聽器就最合適不過了,通過在工程的配置文件中加以合理配置,會在工程啟動時自動運行,并在整個工程生命期中處于監聽狀態。

          ......下面就Servlet偵聽器結合Java定時器來講述整個實現過程。要運用Servlet偵聽器需要實現javax.servlet.ServletContextListener接口,同時實現它的contextInitialized(ServletContextEvent    event)和contextDestroyed(ServletContextEvent    event)兩個接口函數。考慮定時器有個建立和銷毀的過程,看了前面兩個接口函數,就不容置疑的把建立的過程置入contextInitialized,把銷毀的過程置入contextDestroyed了。
          package com.derek.servlet;

          import javax.servlet.*;
          import javax.servlet.http.*;
          import com.derek.pub.TimerManager;
          /**
           * 啟動定時器的監聽器
           * 
          @author derek
           * 
          @version 1.0
           
          */
          public class TimerListener extends HttpServlet implements
                  ServletContextListener {
              
          private TimerManager tm = null;
              
          //Notification that the web module is ready to process requests
              public void contextInitialized(ServletContextEvent sce) {
                
          int day,hour,min,sec;      
                day 
          = 26; hour = 16; min = 42; sec = 0;     
                tm 
          = new TimerManager(day,hour,min,sec);
              }

              
          //Notification that the servlet context is about to be shut down
              public void contextDestroyed(ServletContextEvent sce) {
                 tm.destoryTimer();
              }
          }
          package com.derek.pub;

          import java.util.Timer;
          import java.util.Date;
          import java.util.Calendar;

          /**
           * 定時器
           * 
          @author derek
           * 
          @version 1.0
           
          */
          public class TimerManager {
              Timer t 
          = null;
              
          public TimerManager(int day,int hour,int min,int sec) {
                  time(day,hour,min,sec);
              }
           
              
          public void time(int day,int hour,int min,int sec){    
              Calendar c 
          = Calendar.getInstance();
              c.set(Calendar.DAY_OF_MONTH,day);
              c.set(Calendar.HOUR_OF_DAY,hour);
              c.set(Calendar.MINUTE,min);
              c.set(Calendar.SECOND,sec);
              Date date 
          = c.getTime();
              System.out.println(c.getTime());
              t
          = new Timer();
              MyTask mt 
          = new MyTask();
              t.schedule(mt,date);
              }
              
          public void destoryTimer(){
              t.cancel();
              }
          }
          package com.derek.pub;
          import java.util.TimerTask;
          /**
           * 計劃任務代碼
           * 
          @author derek
           * 
          @version 1.0
           
          */
          public class MyTask extends TimerTask{
              
          public MyTask() {
              }
              
          /**
               * 任務塊
               
          */
              
          public void run() {
                  System.out.println(
          "定時器RUN");
              }
          }
          posted on 2006-04-26 16:52 Derek.Guo 閱讀(2925) 評論(0)  編輯  收藏 所屬分類: Java
          MSN:envoydada@hotmail.com QQ:34935442
          主站蜘蛛池模板: 乌恰县| 通道| 肥东县| 涡阳县| 乌鲁木齐市| 太白县| 沐川县| 苗栗县| 湟中县| 子长县| 大丰市| 柘荣县| 米林县| 雷州市| 巴马| 景德镇市| 宜兰县| 宁城县| 犍为县| 图木舒克市| 谷城县| 千阳县| 栾城县| 光山县| 碌曲县| 阳泉市| 库伦旗| 固镇县| 凤城市| 五原县| 新营市| 苗栗县| 习水县| 宣汉县| 新宁县| 宁国市| 元氏县| 渑池县| 武川县| 恩平市| 建湖县|