javaweb使用監聽器實現定時週期性執行任務的功能

塵光掠影發表於2017-05-05
版權宣告:本文為博主原創文章,如需轉載,請標明出處。 https://blog.csdn.net/alan_liuyue/article/details/71194454

    java web使用監聽器實現定時週期性執行任務的功能在做web專案的時候,有時需要做個定時的功能去執行某個

任務,或者定時週期性去執行某個任務,如定時郵件傳送、檔案刪除等。那麼,我們就需要藉助監聽器去實現這一個

功能,具體的實現過程如下:


    1.配置web.xml,新增監聽器指定類


	<!-- 定時監聽器配置 -->
	<listener>
		<listener-class>listener.DuetimeListener</listener-class>
	</listener>

   

      2.監聽類實現ServletContextListener介面,實現監聽功能

public class DuetimeListener implements ServletContextListener{
	private Timer timer = null; 
	
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel();
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		
		// 新增tomcat日誌
		event.getServletContext().log("定時器已啟動");
		System.out.println("定時器啟動");
		
		try {
			Calendar calendar = Calendar.getInstance();
			calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時,24小時制
			calendar.set(Calendar.MINUTE, 0);  // 控制分
			calendar.set(Calendar.SECOND, 0);  // 控制秒
						
			Date time = calendar.getTime(); // 執行任務的時間,可自行修改,此時為12:00:00

			timer = new Timer(true);
			//引數1:需要執行的類,引數2:執行時間,引數3:執行週期(引數可自行修改)
			//類需要繼承util的TimeTask,預設執行類下的run()方法;
			timer.scheduleAtFixedRate(new TestTimeTask(), time, 1000 * 60 * 60 * 24);  //隔一天(週期性)掃描執行方法,
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

   

     
3.功能類繼承TimerTask類,預設執行run方法


public class TestTimeTask extends TimerTask {

	@Override
	public void run() {
		System.out.println("定時掃描監聽器程式開始執行,傳送郵件");
		deleteFile();
		sendEmail();
		//to do
	}
	
	public boolean deleteFile(){
		System.out.println("定時執行刪除檔案的方法");
		return true;
		//to do
	}
	
	public boolean sendEmail(){
		System.out.println("定時執行傳送郵件的方法");
		return true;
		//to do
	}

}

   

    4.該demo,只用到web.xml、DuetimeListener.java、TestTimeTask.java三個檔案,只是實現定時監聽、週期

性執行任務的功能,而郵件傳送、檔案刪除等自定義功能需要自行新增上去,只需在run方法下修改郵件傳送、檔案

刪除等功能即可;


    5.demo連結:http://download.csdn.net/detail/alan_liuyue/9834172




相關文章