您的位置:首页 > 编程语言 > Java开发

java定时任务,每天定时执行任务(JDK TimerTask)

2013-01-12 15:56 711 查看
01
public
class
TimerManager
{
02
03
//时间间隔
04
private
static
final
long
PERIOD_DAY
=
24
*
60
*
60
*
1000
;
05
06
public
TimerManager()
{
07
Calendar
calendar=Calendar.getInstance();
08
09
/***
定制每日2:00执行方法***/
10
11
calendar.set(Calendar.HOUR_OF_DAY,
2
);
12
calendar.set(Calendar.MINUTE,
0
);
13
calendar.set(Calendar.SECOND,
0
);
14
15
Date
date=calendar.getTime();
//第一次执行定时任务的时间
16
17
//如果第一次执行定时任务的时间
小于当前的时间
18
//此时要在
第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
19
if
(date.before(
new
Date()))
{
20
date
=
this
.addDay(date,
1
);
21
}
22
23
Timer
timer=
new
Timer();
24
25
NFDFlightDataTimerTask
task=
new
NFDFlightDataTimerTask();
26
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
27
timer.schedule(task,date,PERIOD_DAY);
28
}
29
30
//
增加或减少天数
31
public
Date
addDay(Datedate,
int
num)
{
32
Calendar
startDT=Calendar.getInstance();
33
startDT.setTime(date);
34
startDT.add(Calendar.DAY_OF_MONTH,
num);
35
return
startDT.getTime();
36
}
37
38
}
在TimerManager这个类里面,大家一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后

发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况

发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。

01
public
class
NFDFlightDataTimerTask
extends
TimerTask
{
02
03
private
static
Logger
log=Logger.getLogger(NFDFlightDataTimerTask.
class
);
04
05
@Override
06
public
void
run()
{
07
try
{
08
//在这里写你要执行的内容
09
10
}
catch
(Exception
e){
11
log.info(
"-------------解析信息发生异常--------------"
);
12
}
13
}
14
}
15
16
public
class
NFDFlightDataTaskListener
implements
ServletContextListener
{
17
18
public
void
contextInitialized(ServletContextEvent
event){
19
new
TimerManager();
20
}
21
22
public
void
contextDestroyed(ServletContextEvent
event){
23
}
24
25
}
然后要在web.xml里面配置监听器

1
<
listener
>
2
<
listener-class
>
3
com.listener.NFDFlightDataTaskListener
4
</
listener-class
>
5
</
listener
>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: