在Java web專案springMVC框架中實現定時任務
阿新 • • 發佈:2018-11-20
在工作中遇到一個需求,需要定時自動執行某項功能,這就需要用到定時任務了。首先先來理一下實現思路,定時任務可以用Java.util中的timer類,把需要定時執行的任務封裝到timer類的排程表中,這個timer物件需要在程式初始化時建立,這樣才可以讓它自動執行。那麼我們就可以想到需要借用web專案啟動初始化了,把這個工作放到專案初始化階段。下面是具體的實現:
1、建立一個任務類testJob實現ServletContextListener介面
public class testJob implements ServletContextListener {}
public void contextInitialized(ServletContextEvent event) {}--重寫初始化方法,把定時任務創建出來
2、testJob
Timer timer = new Timer();
// 時間間隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; //一天
public void contextInitialized(ServletContextEvent event) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);// 每天
// 定製每天的23:30:00執行,
calendar.set(year, month, day, 10, 00, 00);
// calendar.set(year, month, day, 17, 22, 00); //測試期間控制程式碼
Date date = calendar.getTime(); // 第一次執行定時任務的時間
System.out.println("執行時間:" + TimeHelper.dateToString(date, "yyyy-MM-dd HH:mm:ss"));
event.getServletContext().log("定時器已啟動");
timer.schedule(new BackupTask(), date, PERIOD_DAY);
event.getServletContext().log("已經新增任務排程表");
}
// 程式關閉時銷燬定時器
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定時器已銷燬");
}
3、BackupTask()具體的程式碼實現
4、把實現ServletContextListener介面的初始化類配置到web.xml中,這樣專案啟動時才能監聽到這個類,去進行初始化。
<listener> <listener-class>com.job.testJob</listener-class> </listener>
這樣,定時任務就實現了