首頁 >Java >java教程 >java web定時任務的實作程式碼

java web定時任務的實作程式碼

不言
不言原創
2018-09-21 10:58:282391瀏覽

這篇文章帶給大家的內容是關於java web定時任務的實作程式碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

寫在前面:

  在最近的專案中需要每天定時對資料庫表進行查詢,並完成相關資料的更新操作。首先讓我想到的是Timer類,記得在一開始維護那個老系統的時候,開了個接口,也涉及到了定時的操作。下面就記錄下大概的用法,方便後續工作用到時再找方便。

  由於是用在web中,故當專案啟動的時候,就應該去將這個定時任務給跑起來,這裡用了監聽器,當初始化的時候就去跑此定時程序,然後在定時程序中,根據自己的需求設定對應的執行時間,以及需要執行的任務類別。

  1.首先寫好我們需要執行的任務類別

public class DailyReportTimerTask extends TimerTask{
    public static Logger logger=Logger.getLogger(DailyReportTimerTask.class);
    public void run() {
        System.out.println("----开始执行任务--------------");
    }
}

  任務類別需要繼承TimerTask,這點要注意下

  2.寫一個類別來管理程式開跑的任務類別、時間以及頻率

public class TimeManager {
    public static Logger logger=Logger.getLogger(TimeManager.class);
    //时间间隔
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;  //24小时执行一次
    public TimeManager() {
      
       Calendar calendar = Calendar.getInstance();  
       /*** 定制每日23:10执行方法 ***/
       calendar.set(Calendar.HOUR_OF_DAY, 23);
       calendar.set(Calendar.MINUTE, 10);
       calendar.set(Calendar.SECOND, 0);
       Date date=calendar.getTime();
       System.out.println(date);

       //如果第一次执行定时任务的时间 小于 当前的时间
       //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
       if (date.before(new Date())) {
           date = this.addDay(date, 1);
           System.out.println(date);
       }
      
       Timer timer = new Timer();
    DailyReportTimerTask task = new DailyReportTimerTask();

       //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
       timer.schedule(task,date,PERIOD_DAY);
      }

      //增加几天
      public Date addDay(Date date, int num) {
       Calendar startDT = Calendar.getInstance();
       startDT.setTime(date);
       startDT.add(Calendar.DAY_OF_MONTH, num);
       return startDT.getTime();
      }
}

  3.為了能讓專案初始化的時候,就去將此定時程式跑起來,可以使用監聽器

public class DailyReportListener implements ServletContextListener{
    public void contextDestroyed(ServletContextEvent arg0) {
    
    }
    public void contextInitialized(ServletContextEvent arg0) {
        new TimeManager();
    }

}

  4.最後一步就是在web.xml檔案中設定對應的監聽器

#
858da6a3d73ccf19b1e16adda72c27cf
    eae7f28921fa176b20e23abb843be090
        5948543310f2c9ae6eabc90d07fdac18edu.hue.erp.util.timer.DailyReportListenera5cb73ed00d90e1dafbf6168c4a676c2
    f26bc28f07f75d604e1d9c5e7de10123

 在web中發展一個完成定時任務的程序大致就是這個樣子,對於具體執行的業務程序,需要根據自己的專案去完成即可。

以上是java web定時任務的實作程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn