posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          J2EE定時采集程序

          Posted on 2009-04-08 09:44 ZhouFeng 閱讀(641) 評論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載Web開發(fā)
          最近因項目需要編寫一個定時采集程序,于是就到網(wǎng)上找了一下相關(guān)的資料,最后發(fā)現(xiàn)一個非常簡單的部署定時進程的方法——利用偵聽器和定時器。
          首先,編寫一個Servlet用于啟動定時器和進行任務(wù)調(diào)度,參考代碼如下:
          import javax.servlet.ServletContextEvent;

          public class MyTimer extends javax.servlet.http.HttpServlet implements
                  javax.servlet.ServletContextListener {
              
          // private static final long serialVersionUID = 1L;

              
          private java.util.Timer timer = null;

              
          public void contextInitialized(ServletContextEvent event) {
                  timer 
          = new java.util.Timer(true);
                  System.out.println(
          "定時器已啟動");
                  timer.schedule(
          new MyTimerTask(), 024 * 60 * 60 * 1000);
                  System.out.println(
          "已經(jīng)添加任務(wù)調(diào)度表");
              }

              
          public void contextDestroyed(ServletContextEvent event) {
                  timer.cancel();
                  System.out.println(
          "定時器銷毀");
              }
          }
          其中利用了定時器的java.util.Timer.schedule(TimerTask task, long delay, long period)方法,里面的參數(shù)依次為:任務(wù)類,延時(單位毫秒),周期(單位毫秒)。根據(jù)我的設(shè)定,每24小時運行一次。
          然后是任務(wù)調(diào)度類:
          import java.util.Calendar;
          import java.util.TimerTask;

          public class MyTimerTask extends TimerTask {
              
          private static final int C_SCHEDULE_HOUR = 22;
              
          private static boolean isRunning = false;

              @Override
              
          public void run() {
                  Calendar cal 
          = Calendar.getInstance();
                  
          if (!isRunning) {
                      
          if (C_SCHEDULE_HOUR < cal.get(Calendar.HOUR_OF_DAY)) {
                          isRunning 
          = true;
                          System.out.println(
          "開始執(zhí)行指定任務(wù)");

                          
          /* Your Code */

                          isRunning 
          = false;
                          System.out.println(
          "指定任務(wù)執(zhí)行結(jié)束");
                      }
                  } 
          else {
                      System.out.println(
          "上一次任務(wù)執(zhí)行還未結(jié)束");
                  }
              }
          }
          其中C_SCHEDULE_HOUR為執(zhí)行任務(wù)的時段,根據(jù)我的要求是每天22點后才執(zhí)行我的采集程序。
          最后是配置偵聽器:
          在web.xml中添加以下代碼,當然Servlet名要換成真實的
          <listener>
              
          <listener-class>com.test.MyTimer</listener-class>
          </listener>
          就這樣,只需三步,一個簡單的定時采集進程就搞定了
          主站蜘蛛池模板: 子洲县| 色达县| 临夏市| 江安县| 新竹县| 城口县| 蛟河市| 中牟县| 旺苍县| 贵德县| 通渭县| 顺义区| 盐池县| 伽师县| 瓮安县| 黄梅县| 鱼台县| 尉氏县| 穆棱市| 黑河市| 阿瓦提县| 金塔县| 鱼台县| 大庆市| 四川省| 五常市| 河池市| 平泉县| 项城市| 哈巴河县| 余江县| 玛曲县| 崇文区| 玉环县| 项城市| 深圳市| 宜黄县| 三明市| 乌兰察布市| 重庆市| 上蔡县|