在WEB應用下實作定時任務的簡便方法
在web方式下,如果我們要實作定期執行某些任務的話,除了用quartz等第三方開源工具外,我們可以使用Timer和TimeTask來完成指定的定時任務:
第一步:建立一個任務管理類,實作ServletContextListener 接口
- 以下是引用片段:
- public class TaskManager implements ServletContextListener {
- public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY;
- public static final long PERIOD_WEEK = PERIOD_DAY * 7 ;
- public static final long NO_DELAY = 0 ;
- private Timer timer;
- public void contextInitialized(ServletContextEvent event) {
- //定義定時器
- timer = new Timer( "資料庫表備份" , true );
- //啟動備份任務,每月(4個星期)執行一次
- timer.schedule( new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4 );
- // timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);
- }
- public void contextDestroyed(ServletContextEvent event) {
- timer.cancel(); // 定時器銷毀
- }
- }
java 代碼
- 以下是引用片段:
- 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( "開始執行任務..." ); //開始任務
- //working add what you want to do
- log.debug( "執行任務完成..." ); //任務完成
- isRunning = false ;
- } else {
- log.debug( "上一次任務執行還未結束..." ); //上一次任務執行還未結束
- }
- }
- }
第二步:建立一個時間任務類
以下是引用片段:
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("開始執行任務..."); //開始任務
//working add what you want to do
log.debug("執行任務完成..."); //任務完成
isRunning = false;
} else {
log.debug("上一次任務執行還未結束..."); //上一次任務執行還未結束
}
}
}
第三步:在web中添加一個監聽器
xml 代碼
-
- 以下是引用片段:
- < listener >
- < listener-class > ***.TaskManager</ listener-class >
- < description > 要定期執行的任務</ description >
- </ listener >
那麼在web伺服器啟動的時候,任務也被啟動,并且會周期性的執行