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  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 茂名市| 鄄城县| 富源县| 阿坝县| 板桥市| 西青区| 呼伦贝尔市| 汤原县| 清流县| 芮城县| 左权县| 墨竹工卡县| 新建县| 乌拉特后旗| 景谷| 永川市| 安泽县| 隆子县| 无为县| 和硕县| 普宁市| 顺义区| 许昌县| 班玛县| 神池县| 大冶市| 共和县| 巨鹿县| 阳春市| 墨玉县| 嘉荫县| 荔浦县| 子长县| 乳源| 靖远县| 扶余县| 东丰县| 成安县| 乌拉特前旗| 迁安市| 西藏|