在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
);
timer.schedule(
new
BackUpTableTask(),NO_DELAY, PERIOD_WEEK *
4
);
}
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(
"開始執行任務..."
);
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服務器啓動的時候,任務也被啓動,並且會週期性的執行