java web定時任務---Timer


寫在前面:

  在最近的項目中需要每天定時對數據庫表進行查詢,並完成相關數據的更新操作。首先讓我想到的是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文件中配置對應的監聽器

<!--DailyReportTaskListener 監聽器-->
    <listener>
        <listener-class>edu.hue.erp.util.timer.DailyReportListener</listener-class>
    </listener>

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM