立即注册
 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广州大学城网业务调整

[Java/JSP] JAVA使用Timer和TimeTask来完成指定的定时任务 [复制链接] qrcode

查看: 4698 | 回复: 0

tarena
发表于: 2013-3-22 16:54:36 | 显示全部楼层

  在WEB应用下实现定时任务的简便方法
  在web方式下,如果我们要实现定期执行某些任务的话,除了用quartz等第三方开源工具外,我们可以使用Timer和TimeTask来完成指定的定时任务:
  第一步:创建一个任务管理类,实现ServletContextListener 接口
  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 contextInitialized(ServletContextEvent event) {
  //定义定时器
  timer = new Timer("数据库表备份",true);
  //启动备份任务,每月(4个星期)执行一次
  timer.schedule(new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4);
  // timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);
  }
  /**
  * 在Web应用结束时停止任务
  *Java编程:http://www.javaweb.cc
  */
  public void contextDestroyed(ServletContextEvent event) {
  timer.cancel(); // 定时器销毁
  }
  }
  那么在web服务器启动的时候,任务也被启动,并且会周期性的执行
  第二步:创建一个时间任务类
  public class BackUpTableTask extends TimerTask {
  private static Log log = LogFactory.getLog(BackUpTableTask.class);
  private static boolean isRunning = false;
  public void run() {
  if (!isRunning) {
  isRunning = true;
  log.debug("开始执行任务..."); //开始任务
  //working add what you want to do
  log.debug("执行任务完成..."); //任务完成
  isRunning = false;
  } else {
  log.debug("上一次任务执行还未结束..."); //上一次任务执行还未结束
  }
  }
  }
  第三步:在web中添加一个监听器 xml
  <listener>
  <listener-class>***.TaskManager</listener-class>
  <description>要定期执行的任务</description>
  </listener>
  (责任编辑:广州达内http://www.tstarena.com/   课程:http://www.jvtarena.com/java.html)
跳转到指定楼层
快速回复 返回顶部 返回列表