1. 程式人生 > >在Java web專案springMVC框架中實現定時任務

在Java web專案springMVC框架中實現定時任務


在工作中遇到一個需求,需要定時自動執行某項功能,這就需要用到定時任務了。首先先來理一下實現思路,定時任務可以用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>

這樣,定時任務就實現了