1.建立TimerManage類,設置時間點也切,時間點設置的管理類,代碼如下:
package com.pcitc.time;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerManager {
//時間間隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定制每日2:00執(zhí)行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次執(zhí)行定時任務的時間
//如果第一次執(zhí)行定時任務的時間 小于 當前的時間
//此時要在 第一次執(zhí)行定時任務的時間 加一天,以便此任務在下個時間點執(zhí)行。如果不加一天勤家,任務會立即執(zhí)行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任務在指定的時間開始進行重復的固定延遲執(zhí)行柳恐。
timer.schedule(task,date,PERIOD_DAY);
}
// 增加或減少天數(shù)
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
在 TimerManager 這個類里面伐脖,一定要注意 時間點的問題热幔。如果你設定在凌晨2點執(zhí)行任務。但你是在2點以后發(fā)布的程序或是重啟過服務讼庇,那這樣的情況下绎巨,任務會立即執(zhí)行,而不是等到第二天的凌晨2點執(zhí)行巫俺。為了认烁,避免這種情況發(fā)生,只能判斷一下介汹,如果發(fā)布或重啟服務的時間晚于定時執(zhí)行任務的時間,就在此基礎上加一天舶沛。
2.建立NFDFlightDataTimerTask類,調(diào)用業(yè)務代碼的類放在該類的run方法里面執(zhí)行嘹承。
package com.pcitc.time;
import java.util.TimerTask;
import com.sun.istack.internal.logging.Logger;
public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
// 在這里寫你要執(zhí)行的內(nèi)容
System.out.println("功能方法寫在這里了...");
} catch (Exception e) {
log.info("-------------解析信息發(fā)生異常--------------");
}
}
}
3.在web容器中使用的話,可以配置上下文監(jiān)聽器,使容器在啟動的時候加載該監(jiān)聽器,代碼如下:
package com.pcitc.time;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}
}
4.在web.xml里面配置監(jiān)聽器
<listener>
<listener-class>
com.pcitc.time.NFDFlightDataTaskListener
</listener-class>
</listener>