Posted on 2009-04-08 09:44
ZhouFeng 閱讀(651)
評論(0) 編輯 收藏 所屬分類:
轉載 、
Web開發
最近因項目需要編寫一個定時采集程序,于是就到網上找了一下相關的資料,最后發現一個非常簡單的部署定時進程的方法——利用偵聽器和定時器。
首先,編寫一個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("開始執行指定任務");
/* Your Code */
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>
就這樣,只需三步,一個簡單的定時采集進程就搞定了