1. 程式人生 > >關於Java Web 使用Java的TimerTask, 觸發定時器(執行某些任務)的例項

關於Java Web 使用Java的TimerTask, 觸發定時器(執行某些任務)的例項

importjava.util.TimerTask;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MainAction implements ServletContextListener {
/**
 * 上下文監聽器,需要在web.xml中進行配置,<listener>packageAddress.Class</listener>
* Create by 2017/08/17
* * @author Jmlc */ //現在專案中用到需要定時去檢查檔案是否更新的功能。timer正好用於此處,寫一個timertask的子類即可(timertask就是實現了runnable介面)。 private Timer timer = null; //(獲取容器的例項)servlet 會有幾個週期,當你啟動服務時,發出請求呼叫某個servlet時,就會對該Servlet進行初始化,即init方法, // 然後開始處理請求,在這當中就出現一個servletContext,這個是一個暫時存放資料的地方,上下文關係。通過getServletContext方法得到。 private ServletContext context
= null; //第一步:上下文初始化(init) public void contextInitialized(ServletContextEvent event) { this.context = event.getServletContext(); timer = new Timer(true); event.getServletContext().log("定時器已啟動......"); //第一個引數是要操作的方法,第二個引數是要設定延遲的時間(0表示即刻執行),第三個引數是週期的設定,每隔多長時間執行該操作(每5秒執行一次)。 timer.schedule(new TimingTasks(this
.context), 0, 5 * 1000); event.getServletContext().log("已執行郵件傳送任務......"); } //第?步:上下文銷燬 public void contextDestroyed(ServletContextEvent event) { timer.cancel(); this.context.log("定時器銷燬......"); this.context = null; } //定時任務(郵件傳送任務) private static class TimingTasks extends TimerTask { private static boolean isRunning = false; private ServletContext context = null; public TimingTasks(ServletContext context) { this.context = context; } //下面的方法會按之前設定的每5秒執行一次,所以,此處不需要迴圈 int number = 1;//記錄執行次數,預設1次 public void run() { if (!isRunning) { isRunning = true; context.log("開始執行指定任務......"); int i = 0; while (i++ < 2) { context.log("已完成任務的" + i + "/" + 2); } isRunning = false; context.log("指定任務執行結束......"); context.log("已指定完成任務,第" + number++ + "次。"); } else { context.log("上一次任務執行還未結束......"); } } }
}
<!--(...的任務).監聽器-->
<listener>
   <listener-class>com.jandar.frame.system.web.MainAction</listener-class>
</listener>

上述:<listener-class>包路徑.Class類</listener-class>即可(相當於配置找到你需要執行任務的類(Class))。