任務調度--使用java.util.Timer實現,java.util.timer

來源:互聯網
上載者:User

任務調度--使用java.util.Timer實現,java.util.timer

任務調度是指基於給定時間點,給定時間間隔或者給定執行次數自動執行任務。
舉個例子,比如說我們希望一個系統每周日晚上9點都將資料庫檔案備份一次,這時我們就可以使用任務調度來實現。為了更加的方便,我們需要在tomcat啟動後,自動開始這個調度。
下面是TimerTask的API:

下面是Timer類的API

下面的例子中實現了兩個功能:
1.監測tomcat的web容器的啟動與關閉
2.當web容器啟動後,任務調度分配任務對象,時間和周期。

為了監測web容器的變化,首先需要在web.xml中註冊監聽器

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">    <!-- 添加監聽器 TimerListener為自訂的類,見下方-->    <listener >      <listener-class>com.util.TimerListener</listener-class>    </listener>  <display-name></display-name>   <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

第二步,定義一個任務對象,基礎TimerTask

package com.util;import java.util.Timer;import java.util.TimerTask;/** * 1.定義一個任務對象 *    JDK -- 任務對象需要繼承TimerTask * */public class DataBackup extends TimerTask{    @Override    public void run() {        //描述當前任務需要執行的任務內容        System.out.println("串連資料庫將表結和資料備份到本地的sql檔案中");    }}

第三步.監測web容器的變化,當web容器啟動後,為任務調度分配時間和周期,下面的代碼中包含了幾個例子

package com.util;import java.util.Date;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class TimerListener implements ServletContextListener{    private static Timer timer;    /**     * 監聽web容器關閉     */    @Override    public void contextDestroyed(ServletContextEvent sce) {        System.out.println("web容器關閉");        timer.cancel();    }    /**     * 監聽web容器啟動     */    @Override    public void contextInitialized(ServletContextEvent sce) {        System.out.println("web容器啟動");        /**         * 準備Timer計使器         */        timer = new Timer();        System.out.println("計時器處於準備工作,開始為任務調度分配時間和周期");        //建立任務對象        DataBackup backup = new DataBackup();        //1 schedule(TimerTask task,Data time)        //安排指定的任務在指定的時間開始執行        //月份要減一        //timer.schedule(backup, new Date(115,8,10,9,54,0));        //2 schedule(TimerTask task, Date firstTime, long period)        // 安排指定的任務在指定的時間開始進行重複的固定順延強制        //timer.schedule(backup,new Date(115,8,10,10,0,0) ,2000 );        //3schedule(TimerTask task, long delay)         //安排在指定延遲後執行指定的任務。        //timer.schedule(backup, 5000);        //4 schedule(TimerTask task, long delay, long period)         //timer.schedule(backup, 5000, 2000);        //5.每天早上9點出發一次任務         //timer.schedule(backup,new Date(115,8,11,9,0,0) ,24*60*60*1000);        //6.每星期六的淩晨3點出發一次任務         //timer.schedule(backup, new Date(115,8,12,3,0,0),7*24*60*60*1000);     }}

這樣,當tomcat啟動後,任務對象就會按照你分配時間和周期開始執行。
總結:使用Timer實現任務調度,首先建立定義任務對象,比如這裡的Backup;然後執行個體化一個Timer,並執行個體化任務對象,按照需求調用相對應的方法為任務對象分配時間和周期。以上就是任務調度的實現,至於什麼時候開始這個計時器,即什麼時候開始執行個體化Timer,則需要根據實際情況來確定,比如上面的代碼就是當web容器啟動後開始計時器。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.