如何在服務器上面執行定時程序,在指定的時候執行指定的代碼


首先是ServletContextListener這個類

如果實現這個接口,然后加上xml的配置

<listener>
        <listener-class>com.xxx.xxx.MyTimerTask</listener-class>
      </listener>

當web項目發布至tomcat啟動之后會自動加載這個類,然后重寫里面的contextInitialized和contextDestroyed方法就能在web容器初始化和銷毀的時候干你想干的事情了。這里我們把它用作,開始計時器和結束計時器用。

下面直接上計時器的代碼

/**
 * 計時器任務類
 * @author XX
 *
 */
public class MyTimerTask implements ServletContextListener{

    //定義一個計時器
    private Timer timer = null;
    
    /**
     * 銷毀方法
     */
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        timer.cancel();
        System.out.println("定時器銷毀");
        event.getServletContext().log("定時器銷毀"); 
    }

    /**
     * 創建方法
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        
        //在這里初始化監聽器,在tomcat啟動的時候監聽器啟動,可以在這里實現定時器功能 
        timer = new Timer(true); 
        System.out.println("定時器已啟動");
        event.getServletContext().log("定時器已啟動");//添加日志,可在tomcat日志中查看到 
        
        //調用exportHistoryBean,0表示任務無延遲,5*1000表示每隔5秒執行任務,60*60*1000表示一個小時;
        //timer.schedule(task,0,10*1000);

        Task task = new Task();
         
        //表示一天的毫秒數 
        long daySpan = 24 * 60 * 60 * 1000;
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '16:49:00'");

        Date startTime = new Date();
        try {
            startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        //如果當前已經超過了設置的時間,那么到第二天的這個時間開始
        if(System.currentTimeMillis() > startTime.getTime())
            startTime = new Date(startTime.getTime() + daySpan);
        
        //設置定時器,從startTime開始,每5秒執行一次task
        timer.scheduleAtFixedRate(task, startTime, 5*1000);
        
    }

    //定時器執行的任務
    class Task extends TimerTask{

        @Override
        public void run() {
            System.out.println("定時程序!");
            
        }
    }
    
}


免責聲明!

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



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