下面就Servlet偵聽器結合Java定時器來講述整個實現過程。要運用Servlet偵聽器需要實現
javax.servlet.ServletContextListener接口,同時實現它的contextInitialized (ServletContextEvent event)和contextDestroyed(ServletContextEvent event)兩個接口函數。考慮定時器有個建立和銷毀的過程,看了前面兩個接口函數,就不容置疑的把建立的過程置入 contextInitialized,把銷毀的過程置入contextDestroyed了。
我把ServletContextListener的實現類取名為ContextListener,在其內添加一個定時器,示例代碼如下所示:
package com.tjsoft.buisness.util;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
public class ContextListener extends HttpServlet implements
ServletContextListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public ContextListener() {
}
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定時器已啟動");
timer.schedule(new ExTask(event.getServletContext()), 0, 1000*10*5);
event.getServletContext().log("已經添加任務調度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定時器銷毀");
}
}
以上代碼timer.schedule(new ExTask(event.getServletContext()), 0, 60*60*1000)這一行為定時器調度語句,其中ExTask是自定義需要被調度的執行任務
ExTask.java代碼
package com.tjsoft.buisness.util;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import com.tjsoft.buisness.action.ExAction;
public class ExTask extends TimerTask {
private static boolean isRunning = false;
private ServletContext context = null;
public ExTask(ServletContext context) {
this.context = context;
}
@Override
public void run() {
if (!isRunning) {
isRunning = true;
context.log("開始執行指定任務");
new ExAction().exDate();//這個位子就是你要定時的程序的入口.
isRunning = false;
context.log("指定任務執行結束");
} else {
context.log("上一次任務執行還未結束");
}
}
}
做完上面這些我們只是完了一個個定時器的設定,如果想要在tomcat啟動時就加載,必須要配置web.xml還不夠,
web.xml配置的內容如下
<listener>
<listener-class>com.tjsoft.buisness.util.ContextListener</listener-class>
</listener>
以上為個人在項目中所得,忘與各們共同進步O(∩_∩)O