Java:Web應用下實現(xiàn)定時任務的簡便方法
在Web方式下,如果我們要實現(xiàn)定期執(zhí)行某些任務的話,除了用quartz等第三方開源工具外,我們可以使用Timer和TimeTask來在Java中完成指定的定時任務:
第一步:創(chuàng)建一個任務管理類,實現(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;
/**
* 定時器
*/
private Timer timer;
/**
* 在Web應用啟動時初始化任務
*/
public void contextInitialized(ServletContextEvent event) {
//定義定時器
timer = new Timer("數(shù)據(jù)庫表備份",true);
//啟動備份任務,每月(4個星期)執(zhí)行一次
timer.schedule(new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4);
// timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);
}
/**
* 在Web應用結束時停止任務
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定時器銷毀
}
}
以下是引用片段: 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í)行任務..."); //開始定時任務 //working add what you want to do log.debug("執(zhí)行任務完成..."); //任務完成 isRunning = false; } else { log.debug("上一次任務執(zhí)行還未結束..."); //上一次任務執(zhí)行還未結束 } } } |
第三步:在web中添加一個監(jiān)聽器
以下是引用片段:
那么在web服務器啟動的時候,Java中的定時任務也被啟動,并且會周期性的執(zhí)行
【編輯推薦】