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("這段程式正在執行");
}
}
}