首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

J2EE 後台定時任務實現:TimerTask + ServletContextListener 啟動監聽方案

     編輯:Java 綜合教學

J2EE 後台定時任務實現:TimerTask + ServletContextListener 啟動監聽方案

在 J2EE 項目中,常需後台定時執行業務邏輯(如建索引、發郵件、寫日志)。本文介紹基於 JDK 原生 Timer/TimerTask + ServletContextListener 的輕量級方案。

核心組件

1. 任務類 DisplayDateTask

public class DisplayDateTask extends TimerTask {
    @Override
    public void run() {
        try {
            System.out.println(new Date()); // 定時打印當前時間
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 生命周期監聽器 AutoRunListener

public class AutoRunListener implements ServletContextListener {
    private Timer timer;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        timer = new Timer(true); // 守護線程,不阻塞應用關閉
        // 延遲 0ms,每 3 秒執行一次
        timer.schedule(new DisplayDateTask(), 0, 1000 * 3);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        if (timer != null) {
            timer.cancel(); // 銷毀時取消定時器
        }
    }
}

3. web.xml 註冊

<listener>
    <listener-class>com.example.autorun.AutoRunListener</listener-class>
</listener>

原理說明

  • ServletContextListener 監聽 Web 應用生命周期
  • contextInitialized:容器啟動 WebApp 後調用,早於 Filter/Servlet 初始化
  • contextDestroyed:容器關閉 WebApp 前調用,晚於 Servlet/Filter 銷毀
  • Timer(true):守護線程模式,JVM 退出時自動終止,無需手動清理

生產環境建議升級

  • Spring @Scheduled:聲明式、支持 Cron 表達式、線程池管理
  • Quartz:集群支持、持久化、彈性調度
  • XXL-JOB:分布式任務調度平台,可視化管理

原生 Timer 適合簡單場景,複雜業務建議遷移成熟調度框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved