java中服務器啟動時,執行定時任務


package com.ripsoft.util;

import java.util.Calendar;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TimerListener implements ServletContextListener{
    private Timer timer = null;  
      
    @Override  
    public void contextInitialized(ServletContextEvent event) {  
        timer = new Timer(true);  
        event.getServletContext().log("定時器已啟動");  
       
      //設置執行時間
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
        //定制每天的11:00:00執行
        calendar.set(year, month, day, 11, 00, 00);
        java.util.Date date = calendar.getTime();
        int period = 30 * 1000;
        //每天的date時刻執行TestTask,每隔30秒重復執行
        timer.schedule(new TestTask(), date, period);
        //每天的date時刻執行TestTask, 僅執行一次
        //timer.schedule(new TestTask(), date);
    }  
  
    @Override  
    public void contextDestroyed(ServletContextEvent event) {  
        if (timer != null) {  
            timer.cancel();  
            event.getServletContext().log("定時器銷毀");  
        }  
    }  
}
package com.ripsoft.util;

import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestTask extends TimerTask{
    protected final Log logger = LogFactory.getLog(getClass());  
      
    private static boolean isRunning = false;  
  
    @Override  
    public void run() {  
        if (!isRunning) {  
            isRunning = true;  
            logger.info("開始執行任務。");  
  
            int i = 0;  
            while (i++ < 10) {  
                logger.info("已完成任務的" + i + "/" + 10);  
            }  
  
            isRunning = false;  
            logger.info("任務執行結束。");  
  
        } else {  
            logger.info("上一次任務執行還未結束,本次任務不能執行。");  
        }  
  
    }  
}

1.TestTimerListener.java執行定時任務,實現servlet的ServletContextListener接口,當服務器啟動時開始執行TestTask任務

2.想要任務在服務器啟動時定時執行,就要借助監聽實現需要在web.xml中做如下配置

    <listener>
        <listener-class>com.ripsoft.util.TimerListener</listener-class>
    </listener>


免責聲明!

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



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