首先是ServletContextListener這個類
如果實現這個接口,然后加上xml的配置
<listener>
<listener-class>com.xxx.xxx.MyTimerTask</listener-class>
</listener>
當web項目發布至tomcat啟動之后會自動加載這個類,然后重寫里面的contextInitialized和contextDestroyed方法就能在web容器初始化和銷毀的時候干你想干的事情了。這里我們把它用作,開始計時器和結束計時器用。
下面直接上計時器的代碼
/** * 計時器任務類 * @author XX * */ public class MyTimerTask implements ServletContextListener{ //定義一個計時器 private Timer timer = null; /** * 銷毀方法 */ @Override public void contextDestroyed(ServletContextEvent event) { timer.cancel(); System.out.println("定時器銷毀"); event.getServletContext().log("定時器銷毀"); } /** * 創建方法 */ @Override public void contextInitialized(ServletContextEvent event) { //在這里初始化監聽器,在tomcat啟動的時候監聽器啟動,可以在這里實現定時器功能 timer = new Timer(true); System.out.println("定時器已啟動"); event.getServletContext().log("定時器已啟動");//添加日志,可在tomcat日志中查看到 //調用exportHistoryBean,0表示任務無延遲,5*1000表示每隔5秒執行任務,60*60*1000表示一個小時; //timer.schedule(task,0,10*1000); Task task = new Task(); //表示一天的毫秒數 long daySpan = 24 * 60 * 60 * 1000; final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '16:49:00'"); Date startTime = new Date(); try { startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date())); } catch (ParseException e) { e.printStackTrace(); } //如果當前已經超過了設置的時間,那么到第二天的這個時間開始 if(System.currentTimeMillis() > startTime.getTime()) startTime = new Date(startTime.getTime() + daySpan); //設置定時器,從startTime開始,每5秒執行一次task timer.scheduleAtFixedRate(task, startTime, 5*1000); } //定時器執行的任務 class Task extends TimerTask{ @Override public void run() { System.out.println("定時程序!"); } } }