前沿:為了清楚的講明白java定時器的建立,下面以一個規定每天10點時候自動查詢使用者表的例子為例。步驟如下:
1.配置監聽器(web.xml裡配置一個監聽器)
自動查詢使用者表監聽器
com.tcl.base.web.listener.TimerSendOrderListener
2.實作上面配置的那個監聽器類:TimerSendOrderListener
package com.tcl.base.web.listener;
@SuppressWarnings("serial")
public class TimerSendOrderListener extends HttpServlet implements
ServletContextListener {
private Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("自動查詢使用者表監聽器已啟動");
timer.schedule(new TimerSendOrder(event.getServletContext()), 0, 1000);
// 0表示Tomcat啟動時運作,且不延遲1000表示運作周期為1秒
event.getServletContext().log("自動查詢使用者表已經添加任務排程表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("自動查詢使用者表監聽器銷毀");
}
}
3.實作重頭戲--自動查詢使用者表的定時器了類:TimerSendOrder
public class TimerSendOrder extends TimerTask {
public TimerSendOrder() {
super();
}
private static final int C_SCHEDULE_HOUR = 10;// 這個代表10點鐘的時候執行任務
private static boolean isRunning = false;
private ServletContext context = null;
public TimerSendOrder(ServletContext context) {
this.context = context;
//ServletContext servletContext = request.getSession().getServletContext();
}
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
isRunning = true;
context.log("開始執行指定任務");
//從這兒開始後面的代碼才是我們在執行定時器時候具體要實作的業務邏輯了
//這裡還是以查詢使用者表為例
userList("select * from user");
}
} else {
context.log("上一次任務執行還未結束");
}
}
public void init() throws ServletException {
}
}