做APP的智能推送系统,需要每天晚上从数据库中导出数据,然后在晚上空闲时把数据计算出来,需要定时任务。下面是做测试时的demo代码。
package testtimer;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ExportData implements ServletContextListener {
private Timer timer = null;
@Override
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
timer = new Timer(true);
event.getServletContext().log("The timer task start.");
timer.schedule(new DataTimerTask(event.getServletContext()), 0,
60 * 60 * 1000);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
timer.cancel();
event.getServletContext().log("The timer task destroyed!");
}
}
package testtimer;
import java.io.IOException;
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
//The timer task, it will run everyday automatically.
public class DataTimerTask extends TimerTask {
//the time task run.
private static final int C_SHEDULE_HOUR = 1;
private static boolean isRunning = false;
private ServletContext context = null;
public DataTimerTask(ServletContext context) {
this.context = context;
}
@Override
public void run() {
// TODO Auto-generated method stub
Calendar c = Calendar.getInstance();
if (!isRunning) {
if (C_SHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) {
isRunning = true;
context.log("The task is running!");
// execute the function here.
System.out.println("Hello World");
}
isRunning = false;
}
}
}
修改tomcat 配置,在web.xml中添加
<listener>
<listener-class>testtimer.ExportData</listener-class>
</listener>
注意问题:在eclipse中调试时,会出现 class not found的错误,不用纠结,先打war包放到tomcat/webapp下试试看。因为在调试环境下,经常会出这个莫名其妙的错的!