1. 程式人生 > >javaWeb監聽器結合定時器實現定時執行任務

javaWeb監聽器結合定時器實現定時執行任務

java監聽器

通過監聽器可以自動的激發一些操作,比如監聽線上人數;

監聽器介面有:

ServletContextListener——監聽ServletContext物件;

HttpSessionListener——監聽session物件;

ServletRequestListener——監聽request物件;

java監聽器的使用步驟

1.確定監聽的物件,實現對應介面,並重寫介面中的方法;

2.在web.xml中配置該監聽器;

java定時器

在應用中,經常需要定期的執行某個操作,此時利用java定時器,java.util.Timer工具類實現定期執行該任務。

java定時器的使用步驟

1.建立該定時器的類,實現TimerTask介面,重寫run方法,run方法中具體寫該操作;

2.建立Timer物件,呼叫schedule()方法,設定定時執行的規則,包括多久執行一次,具體執行哪個任務;

例子:監聽器與定時器結合週期性執行任務

實現每天早上7點定時執行某任務和每一個小時,每二十分鐘分別執行不同的任務

1.建立監聽器類CrawlListenner

public class CrawlListenner implements ServletContextListener {
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
    
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        Timer timer = new Timer();
        CrawlTask task = new CrawlTask();
        CrawlDataSumTask dataTask = new CrawlDataSumTask();
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 7);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date date = calendar.getTime();
        // 此時要在第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
        if (date.before(new Date())) {
            calendar.add(Calendar.DAY_OF_MONTH,1);
            date =calendar.getTime();
        }
        // 定點執行,每隔一天重複的執行
        timer.schedule(dataTask, date,PERIOD_DAY);
        // 隔一段時間執行一次
        timer.schedule(task, 0, 1 * 60 * 1000);
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }
</pre><p><span style="font-size:14px;"></span></p><p><span style="font-size:14px;">2.配置web.xml檔案,新增監聽器</span></p><p><span style="font-size:14px;"></span><pre name="code" class="java">    <listener>
        <listener-class>com.listenner.CrawlListenner</listener-class>
    </listener>

3.建立定時器類,繼承TimerTask,重寫run方法,run方法中就是定期執行的任務

<span style="font-size:14px;">//每20分鐘、60分鐘執行一次
public class CrawlTask extends TimerTask {
    private int count = 0;

    @Override
    public void run() {
        count++;
        CrawlAllListenner listen = null;
        if (count % 21 == 0) {
            listen = new CrawlMasterListenImpl();
        }
        if (count % 61 == 0) {
            listen = new HbaseDataListenImpl();
        }
        if (listen != null) {
            listen.crawlListener();
        }
    }

}</span>

<span style="font-size:14px;">//每天七點執行
public class CrawlDataSumTask extends TimerTask {
    @Override
    public void run() {
        CrawlAllListenner listen = new HbaseDataListenImpl();
        listen.dataSumListenner();

    }
}</span>