溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法示例

發(fā)布時(shí)間:2020-09-14 01:42:04 來(lái)源:腳本之家 閱讀:163 作者:獨(dú)坐一隅 欄目:編程語(yǔ)言

本文實(shí)例講述了Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法。分享給大家供大家參考,具體如下:

定時(shí)任務(wù)時(shí)間控制類

/**
 * 定時(shí)任務(wù)時(shí)間控制
 *
 * @author liming
 *
 */
public class TimerManager {
  // 時(shí)間間隔
  private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
  public TimerManager() {
    Calendar calendar = Calendar.getInstance();
    /*** 定制每日00:00執(zhí)行方法 ***/
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    Date date = calendar.getTime(); //執(zhí)行定時(shí)任務(wù)的時(shí)間
    // 在啟動(dòng)服務(wù)器時(shí)如果第一次執(zhí)行定時(shí)任務(wù)的時(shí)間小于當(dāng)前的時(shí)間任務(wù)會(huì)立即執(zhí)行。
    // 因此為了防止重啟服務(wù)器造成任務(wù)重復(fù)執(zhí)行,需要將執(zhí)行定時(shí)任務(wù)的時(shí)間修改為第二天。
    if (date.before(new Date())) {
      date = this.addDay(date, 1);
    }
    Timer timer = new Timer();
    DailyDataTimerTask task = new DailyDataTimerTask();
    // 任務(wù)執(zhí)行間隔。
    timer.schedule(task, date, PERIOD_DAY);
  }
  // 增加或減少天數(shù)
  public Date addDay(Date date, int num) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH, num);
    return startDT.getTime();
  }
}

定時(shí)任務(wù)操作主體類

/**
 * 定時(shí)任務(wù)操作主體
 *
 * @author liming
 *
 */
public class DailyDataTimerTask extends TimerTask {
  private static Logger log = Logger.getLogger(DailyDataTimerTask.class);
  @Override
  public void run() {
    try {
      //在這里寫你要執(zhí)行的內(nèi)容
      System.out.println("come in DailyDataTimerTask");
    } catch (Exception e) {
      log.info("-------------解析信息發(fā)生異常--------------");
    }
  }
}

定時(shí)任務(wù)監(jiān)聽(tīng)器

/**
 * 定時(shí)任務(wù)監(jiān)聽(tīng)器
 *
 * @author liming
 *
 */
public class DailyDataTaskListener implements ServletContextListener {
  public void contextInitialized(ServletContextEvent event) {
    new TimerManager();
  }
  public void contextDestroyed(ServletContextEvent event) {
  }
}

web.xml添加監(jiān)聽(tīng)器

<!--加載每日數(shù)據(jù)更新定時(shí)任務(wù)文件-->
<listener>
    <listener-class>
      com.honsto.web.job.DailyDataTaskListener
    </listener-class>
</listener>

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI