在WEB应用下实现定时任务的简便方法
在web方式下,如果我们要实现定期执行某些任务的话,除了用quartz等第三方开源工具外,我们可以使用Timer和TimeTask来完成指定的定时任务:
第一步:创建一个任务管理类,实现ServletContextListener 接口
package lbs.client.systemservice; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.lang.time.DateUtils; public class TaskManager implements ServletContextListener { //每天的毫秒数 public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY; //一周的毫秒数 public static final long PERIOD_WEEK = PERIOD_DAY * 7; //无延迟 public static final long NO_DELAY = 0; //定时器 private Timer timer; /** * 在Web应用结束时停止任务 */ public void contextDestroyed(ServletContextEvent sce) { timer.cancel();//定时器销毁 } /** * 在Web应用启动时初始化任务 */ public void contextInitialized(ServletContextEvent sce) { //定义定时器 timer = new Timer(true); //timer.schedule(new LocationTask(), NO_DELAY, PERIOD_WEEK * 4); timer.schedule(new LocationTask(), NO_DELAY, 30000); } }
那么在web服务器启动的时候,任务也被启动,并且会周期性的执行
第二步:创建一个时间任务类
package lbs.client.systemservice; import java.util.TimerTask; public class LocationTask extends TimerTask { private static boolean isRunning = false; @Override public void run() { if(!isRunning) { isRunning = true; System.out.println("执行了"); isRunning = false; } else { System.out.println("执行错误"); } } }
第三步:在web中添加一个监听器 xml
<listener> <listener-class>lbs.client.systemservice.TaskManager</listener-class> </listener>