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

          J2EE定時(shí)采集程序

          Posted on 2009-04-08 09:44 ZhouFeng 閱讀(649) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載Web開(kāi)發(fā)
          最近因項(xiàng)目需要編寫(xiě)一個(gè)定時(shí)采集程序,于是就到網(wǎng)上找了一下相關(guān)的資料,最后發(fā)現(xiàn)一個(gè)非常簡(jiǎn)單的部署定時(shí)進(jìn)程的方法——利用偵聽(tīng)器和定時(shí)器。
          首先,編寫(xiě)一個(gè)Servlet用于啟動(dòng)定時(shí)器和進(jìn)行任務(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(
          "定時(shí)器已啟動(dòng)");
                  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(
          "定時(shí)器銷毀");
              }
          }
          其中利用了定時(shí)器的java.util.Timer.schedule(TimerTask task, long delay, long period)方法,里面的參數(shù)依次為:任務(wù)類,延時(shí)(單位毫秒),周期(單位毫秒)。根據(jù)我的設(shè)定,每24小時(shí)運(yùn)行一次。
          然后是任務(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(
          "開(kāi)始執(zhí)行指定任務(wù)");

                          
          /* Your Code */

                          isRunning 
          = false;
                          System.out.println(
          "指定任務(wù)執(zhí)行結(jié)束");
                      }
                  } 
          else {
                      System.out.println(
          "上一次任務(wù)執(zhí)行還未結(jié)束");
                  }
              }
          }
          其中C_SCHEDULE_HOUR為執(zhí)行任務(wù)的時(shí)段,根據(jù)我的要求是每天22點(diǎn)后才執(zhí)行我的采集程序。
          最后是配置偵聽(tīng)器:
          在web.xml中添加以下代碼,當(dāng)然Servlet名要換成真實(shí)的
          <listener>
              
          <listener-class>com.test.MyTimer</listener-class>
          </listener>
          就這樣,只需三步,一個(gè)簡(jiǎn)單的定時(shí)采集進(jìn)程就搞定了
          主站蜘蛛池模板: 高邮市| 老河口市| 青州市| 大同市| 长治市| 东乡县| 横山县| 东城区| 全南县| 铜梁县| 岑溪市| 乌兰县| 佛学| 南皮县| 遂昌县| 黎川县| 中牟县| 福安市| 巴林左旗| 出国| 汕头市| 琼结县| 中牟县| 乐都县| 云阳县| 交口县| 广水市| 军事| 固始县| 海晏县| 三门县| 衡山县| 广西| 云霄县| 阳春市| 富顺县| 仁化县| 青川县| 康马县| 化州市| 桂阳县|