posts - 60,comments - 71,trackbacks - 0

          一個WEB應用程序下的定時任務,覺得寫的比較全,所以轉了一下.
              一個實現ServletContextListener接口的類: StatisticsContextListener.java
          package com.ed.cnc.servletListener;

          import javax.servlet.ServletContextEvent;
          import javax.servlet.ServletContextListener;

          import com.ed.cnc.city.StatisticsTask;

          /**
           * 統計ContextListener
           * 
          @author westd
           *
           
          */

          /**
           * 
          @author westd
           *
           
          */

          public class StatisticsContextListener implements ServletContextListener
          {

              
          private java.util.Timer timer = null;
              
              
              
          /**
               * 這個方法在Web應用服務做好接受請求的時候被調用。
               * 
               * 
          @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
               
          */

              
          public void contextInitialized(ServletContextEvent event) 
              
          {
                  timer 
          = new java.util.Timer(true);
                  event.getServletContext().log(
          "定時器已啟動"); 
                  timer.schedule(
          new StatisticsTask(event.getServletContext()), 060*60*1000);//每隔1小時
                  event.getServletContext().log("已經添加任務調度表");
              }

              
              
              
          /**
               * 這個方法在Web應用服務被移除,沒有能力再接受請求的時候被調用。
               * 
               * 
          @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
               
          */

              
          public void contextDestroyed(ServletContextEvent event)
              
          {
                  timer.cancel();
                  event.getServletContext().log(
          "定時器銷毀");
              }


          }


          一個繼承于TimerTask的一個類:StatisticsTask.java
          package com.ed.cnc.city;

          import java.util.Calendar;
          import java.util.TimerTask;

          import javax.servlet.ServletContext;


          /**
           * 統計任務
           * 
          @author westd
           *
           
          */

          public class StatisticsTask extends TimerTask
          {

              
          private static final int STATISTICS_SCHEDULE_HOUR = 0;
              
          private static boolean isRunning = false;
              
          private ServletContext context = null;

              
          public StatisticsTask(ServletContext context)
              
          {
                  
          this.context = context;
              }

              
              @Override
              
          public void run()
              
          {
                  Calendar cal 
          = Calendar.getInstance(); 
                  
          //System.out.println(isRunning);
                  if (!isRunning) 
                  

                      
          if (STATISTICS_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) //查看是否為凌晨
                      
                          isRunning 
          = true
                          context.log(
          "開始執行指定任務");
                          
                          
          //TODO 添加自定義的詳細任務
                          executeTask();
                          
                          
          //指定任務執行結束
                          isRunning = false;
                          context.log(
          "指定任務執行結束"); 
                      }
           
                  }
           
                  
          else 
                  
          {
                      context.log(
          "上一次任務執行還未結束");
                  }

              
              }


              
          /**
               * 執行任務
               
          */

              
          public void executeTask()
              
          {
                  System.out.println(
          "任務1");
                  System.out.println(
          "任務2");
              }

          }


          web.xml中添加如下代碼:
          <listener>
                  
          <listener-class>com.ed.cnc.servletListener.StatisticsContextListener</listener-class>
          </listener>
          posted on 2008-07-25 15:48 henry1451 閱讀(433) 評論(1)  編輯  收藏

          FeedBack:
          # re: 利用ServletContextListener實現定時任務(l轉)
          2009-01-07 15:06 | 汽車工業濾紙
          uijhy  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 嘉荫县| 金山区| 巴彦淖尔市| 桦甸市| 昌宁县| 北宁市| 得荣县| 格尔木市| 宣城市| 阳谷县| 平安县| 巧家县| 建湖县| 汕尾市| 青阳县| 平罗县| 岳阳市| 喀喇沁旗| 玛多县| 凌源市| 永昌县| 光泽县| 德昌县| 滦南县| 梅河口市| 普定县| 察雅县| 酉阳| 唐海县| 太仓市| 孝感市| 阳西县| 韶山市| 广东省| 清水县| 兰州市| 江口县| 黄浦区| 休宁县| 台南县| 庆城县|