1. 程式人生 > >javaweb專案中使用定時器的方法

javaweb專案中使用定時器的方法

1.建立一個javaweb專案。在web.xml裡配置資訊。

例子:

 <listener>
  <listener-class>timer.TimerListener</listener-class>
 </listener>

2.建立一個TimerListener類,實現ServletContextListener介面。

例子:

package timer;

import java.util.Calendar;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TimerListener implements ServletContextListener{
 private Timer timer=null;
 @Override
 public void contextDestroyed(ServletContextEvent sce) {
  if(timer!=null){
   timer.cancel();
   sce.getServletContext().log("定時器已銷燬");
  }
 }

 @Override
 public void contextInitialized(ServletContextEvent sce) {
  Calendar now = Calendar.getInstance();//伺服器正常的時間
  
  
  //執行任務,每天16:49
  long time_updateDB = 24*60*60*1000; 
  Calendar everyday = Calendar.getInstance();
  everyday.set(Calendar.HOUR_OF_DAY, 16);
  everyday.set(Calendar.MINUTE, 49);
  everyday.set(Calendar.SECOND, 0);
  if(now.compareTo(everyday) > 0){
   everyday.add(Calendar.DAY_OF_MONTH, 1);
  }

  timer = new Timer(true);
  sce.getServletContext().log("時器已啟動");
  timer.schedule(new TimerJob(sce.getServletContext()), everyday.getTime(),time_updateDB);
  
  
 }

}

3.建立一個TimerJob類 繼承TimerTask

例子:

package timer;

import java.util.TimerTask;

import javax.servlet.ServletContext;

public class TimerJob extends TimerTask{
 private ServletContext servletContext;

 public TimerJob(ServletContext servletContext) {
  this.servletContext = servletContext;
    }
 @Override
 public void run() {
  servletContext.log("定時器開始執行");
  for (int i = 0; i < 100; i++) {
   System.out.println("這段程式正在執行");
  }
 }

}