來源:北大青鳥飛迅校區(qū)|發(fā)布時(shí)間:2013-05-04 09:27:36
北大青鳥老師講解:Java:Web應(yīng)用下實(shí)現(xiàn)定時(shí)任務(wù)的簡便方法
在web方式下,如果我們要實(shí)現(xiàn)定期執(zhí)行某些任務(wù)的話,除了用quartz等第三方開源工具外,我們可以使用Timer和TimeTask來完成指定的定時(shí)任務(wù):
第一步:創(chuàng)建一個(gè)任務(wù)管理類,實(shí)現(xiàn)ServletContextListener 接口
以下是引用片段:
public class TaskManager implements ServletContextListener {
/**
* 每天的毫秒數(shù)
*/
public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY;
/**
* 一周內(nèi)的毫秒數(shù)
*/
public static final long PERIOD_WEEK = PERIOD_DAY * 7;
/**
* 無延遲
*/
public static final long NO_DELAY = 0;
/**
* 定時(shí)器
*/
private Timer timer;
/**
* 在Web應(yīng)用啟動(dòng)時(shí)初始化任務(wù)
*/
public void contextInitialized(ServletContextEvent event) {
//定義定時(shí)器
timer = new Timer("數(shù)據(jù)庫表備份",true);
//啟動(dòng)備份任務(wù),每月(4個(gè)星期)執(zhí)行一次
timer.schedule(new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4);
// timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);
}
/**
* 在Web應(yīng)用結(jié)束時(shí)停止任務(wù)
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定時(shí)器銷毀
}
}
第二步:創(chuàng)建一個(gè)時(shí)間任務(wù)類
以下是引用片段: public class BackUpTableTask extends TimerTask { private static Log log = LogFactory.getLog(BackUpTableTask.class); private static boolean isRunning = false; public void run() { if (!isRunning) { isRunning = true; log.debug("開始執(zhí)行任務(wù)..."); //開始任務(wù) //working add what you want to do log.debug("執(zhí)行任務(wù)完成..."); //任務(wù)完成 isRunning = false; } else { log.debug("上一次任務(wù)執(zhí)行還未結(jié)束..."); //上一次任務(wù)執(zhí)行還未結(jié)束 } } } |
第三步:在web中添加一個(gè)監(jiān)聽器
以下是引用片段:
<listener>
<listener-class>***.TaskManager</listener-class>
<description>要定期執(zhí)行的任務(wù)</description>
</listener>
那么在web服務(wù)器啟動(dòng)的時(shí)候,任務(wù)也被啟動(dòng),并且會(huì)周期性的執(zhí)行
全程面授,不高薪都難
申請成功后,我們將在24小時(shí)內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號(hào)
Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有
湘ICP備14017520號(hào)-3