Posted on 2009-04-08 09:44
ZhouFeng 閱讀(637)
評論(0) 編輯 收藏 所屬分類:
轉(zhuǎn)載 、
Web開發(fā)
最近因項目需要編寫一個定時采集程序,于是就到網(wǎng)上找了一下相關的資料,最后發(fā)現(xiàn)一個非常簡單的部署定時進程的方法——利用偵聽器和定時器。
首先,編寫一個Servlet用于啟動定時器和進行任務調(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(), 0, 24 * 60 * 60 * 1000);
System.out.println("已經(jīng)添加任務調(diào)度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
System.out.println("定時器銷毀");
}
}
其中利用了定時器的java.util.Timer.schedule(TimerTask task, long delay, long period)方法,里面的參數(shù)依次為:任務類,延時(單位毫秒),周期(單位毫秒)。根據(jù)我的設定,每24小時運行一次。
然后是任務調(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í)行指定任務");
/* Your Code */
isRunning = false;
System.out.println("指定任務執(zhí)行結(jié)束");
}
} else {
System.out.println("上一次任務執(zhí)行還未結(jié)束");
}
}
}
其中C_SCHEDULE_HOUR為執(zhí)行任務的時段,根據(jù)我的要求是每天22點后才執(zhí)行我的采集程序。
最后是配置偵聽器:
在web.xml中添加以下代碼,當然Servlet名要換成真實的
<listener>
<listener-class>com.test.MyTimer</listener-class>
</listener>
就這樣,只需三步,一個簡單的定時采集進程就搞定了