**jsp定時採集程式原理及源碼

來源:互聯網
上載者:User

 

 

 

最近因項目需要編寫一個定時採集程式,發現一個非常簡單的部署定時進程的方法——利用接聽程式和定時器。
  首先,編寫一個Servlet用於啟動定時器和進行任務調度,參考代碼如下:

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(), 0, 24 * 60 * 60 * 1000);
    System.out.println("已經新增工作調度表");
  }

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

其中利用了定時器的java.util.Timer.schedule(TimerTask task, long delay, long period)方法,裡面的參數依次為:任務類,延時(單位毫秒),周期(單位毫秒)。根據我的設定,每24小時運行一次。
然後是任務調度類:
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("開始執行指定任務");

        /*這裡可以是任何代碼*/

        isRunning = false;
        System.out.println("指定任務執行結束")
      }
    } else {
      System.out.println("上一次任務執行還未結束");
    }
  }
}

 

其中C_SCHEDULE_HOUR為執行任務的時段,根據我的要求是每天22點後才執行我的採集程式。

  最後是配置接聽程式:
  在web.xml中添加以下代碼,當然Servlet名要換成真實的。
  <listener>
    <listener-class>com.test.MyTimer</listener-class>
  </listener>

 

重點:

1監聽器在開啟伺服器的時候就初始化了.
配置為:
 <listener>
<listener-class>com.pp.MyTimer</listener-class>
</listener>
public class MyTimer extends HttpServlet implements ServletContextListener
{//定時器繼承監聽類.把它設定成10秒執行一次任務
 timer.schedule(new MyTimerTask(), 0, 10 * 1000);
..
}
2.
這樣在伺服器啟動10秒後會自動執行MyTimeTask.
public class MyTimerTask extends TimerTask {
 public void run() {...}
    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.