java 通過listener開啓定時任務

當前使用的是Timer進行定時任務,Timer同時指定多久後開始執行以及執行週期。

//開啓監聽
public class TimerManagerListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		new TimerManager();
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}

}
//簡易定時任務管理
public class TimerManager {
	Properties properties = new Properties();

	public TimerManager() {
		try {
            //讀取配置文件
			properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream("timer.properties"),"UTF-8"));
			long PERIOD_DAY = Integer.parseInt(properties.getProperty("periodDay")) * 60 * 60 * 1000;
			// 獲取並處理配置文件中的時間
			String backuptime = properties.getProperty("backuptime");
			String[] time = backuptime.split(":");
			int hours = Integer.parseInt(time[0]);
			int minute = Integer.parseInt(time[1]);
			int second = Integer.parseInt(time[2]);

			Calendar calendar = Calendar.getInstance();

			/*** 定製每日24:00執行方法 ***/
			calendar.set(Calendar.HOUR_OF_DAY, hours);
			calendar.set(Calendar.MINUTE, minute);
			calendar.set(Calendar.SECOND, second);

			Date date = calendar.getTime(); // 第一次執行定時任務的時間
			// 如果第一次執行定時任務的時間 小於 當前的時間
			// 此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
			if (date.before(new Date())) {
				date = this.addDay(date, 1);
			}
			Timer timer = new Timer();
			BackUpTimerTask task = new BackUpTimerTask();
			// 安排指定的任務在指定的時間開始進行重複的固定延遲執行。
			timer.schedule(task, date, PERIOD_DAY);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 增加或減少天數
	public Date addDay(Date date, int num) {
		Calendar startDT = Calendar.getInstance();
		startDT.setTime(date);
		startDT.add(Calendar.DAY_OF_MONTH, num);
		return startDT.getTime();
	}
}

 

//定時任務
public class BackUpTimerTask extends TimerTask {

	@Override
	public void run() {
		try {
			new BackupDb();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
//內容
public class BackupDb {
	System.out.println("hello world");
}

   

配置文件

timer.properties 配置文件

periodDay=24
backuptime=24:00:00

web.xml文件中添加listener

<listener>
	<listener-class>com.listener.TimerManagerListener</listener-class>
</listener>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章