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

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

          import javax.servlet.*;
          import javax.servlet.http.*;
          import com.derek.pub.TimerManager;
          /**
           * 啟動定時器的監(jiān)聽器
           * 
          @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
          主站蜘蛛池模板: 金阳县| 柯坪县| 偏关县| 梁山县| 开原市| 桃源县| 郎溪县| 黔西| 濉溪县| 鸡西市| 沧州市| 金门县| 阳城县| 惠安县| 嘉善县| 化德县| 山阴县| 清水河县| 嘉定区| 涞水县| 锡林浩特市| 河池市| 兴城市| 定日县| 深圳市| 抚顺县| 图木舒克市| 施甸县| 开鲁县| 吉水县| 靖西县| 普兰店市| 大埔县| 右玉县| 玉环县| 郎溪县| 霍邱县| 汤阴县| 伊川县| 长垣县| 上杭县|