甜咖啡

          我的IT空間

          監聽器

          這個類最終功能是每天某個時間點(如每晚22點)執行某一功能.

          首先介紹java定時器(java.util.Timer)有定時執行計劃任務的功能,通過設定定時器的間隔時間,會自動在此間隔時間后執行預先安排好的任務(java.util. TimerTask)

          如: 每隔一個小時執行任務 timer.schedule(TimerTask, 0, 60 * 60 * 1000);

              schedule方法的第一個參數是需要執行的任務,此類的類型為java.util.TimerTask,第二個參數為執行任務前等待時間,此處0表示不等待,第三個參數為間隔時間,單位為毫秒

          由于我們希望當Web工程啟動時,定時器能自動開始計時,這樣在整個Web工程的生命期里,就會定時的執行任務,因此啟動定時器的類不能是一般的類,此處用Servlet的監聽器類來啟動定時器,通過在配置文件里配置此監聽器, 讓其在工程啟動時自動加載運行,存活期為整個Web工程生命期.

          要運用Servlet偵聽器需要實現javax.servlet.ServletContextListener接口,以下是類設計:






          public class WorkServiceImpl implements WorkService , ServletContextListener ...{


          public void contextDestroyed(ServletContextEvent arg0) ...{
           
              timer.cancel();
              System.out.println("定時器已銷毀");
               }

          public void contextInitialized(ServletContextEvent event) ...{
           
                timer = new java.util.Timer(true);
                sampleTask =   new SampleTask(event.getServletContext());
                System.out.println("定時器已啟動");
                      timer.schedule(sampleTask, 0, 60 * 60 * 1000);
                      System.out.println("已經添加任務調度表");
               }
          }


          class SampleTask extends TimerTask...{  

           
          private ServletContext context; 
              private static boolean isRunning = false;
              private static boolean flag = true;
              private static final int C_SCHEDULE_HOUR = 23;
              private WorkServiceImpl workService;
            
              public SampleTask(ServletContext context)...{
               this.context = context;
              } 

              public void run() ...{
               workService = new WorkServiceImpl();
                  Calendar cal = Calendar.getInstance();
                  if (!isRunning) ...{
                      if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag) ...{
                          isRunning = true;
                          workService.autoWorkOff();
                          isRunning = false;
                          flag = false;
                          context.log("指定任務執行結束");
                      }
                  } else ...{
                      context.log("上一次任務執行還未結束");
                  }
                  if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY))...{
                      flag = true;
                  }
                }
          }



          要使用此監聽器需要在web.xml中配置,如下:
          <listener>
                  <listener-class>com.css.wam.service.impl.WorkServiceImpl</listener-class>
          </listener>


          這樣在web工程啟動時,就會自動啟動此監聽器

          posted on 2011-07-13 16:20 甜咖啡 閱讀(169) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          <2011年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(1)

          我參與的團隊

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 庆云县| 开阳县| 乌鲁木齐县| 东乡族自治县| 桐庐县| 侯马市| 青川县| 湟源县| 河西区| 肥城市| 韶山市| 古交市| 微山县| 宁远县| 明星| 承德市| 临沂市| 迭部县| 图们市| 莱西市| 金寨县| 西畴县| 吉木萨尔县| 凭祥市| 汉寿县| 利辛县| 陇川县| 大庆市| 富顺县| 泗水县| 宁陕县| 思南县| 宣恩县| 固原市| 安康市| 台中市| 桦南县| 卓资县| 高碑店市| 沙洋县| 江北区|