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

Tomcat 啟動時自動啟動背景執行緒:ServletContextListener 實作指南

     編輯:Java 綜合教學

Tomcat 啟動時自動啟動背景執行緒

在 Web 應用中,常需在 Tomcat 啟動時啟動長期執行的背景任務(如定時排程、資料預載、連線池預熱)。標準做法是實作 ServletContextListener 介面,於 contextInitialized 方法中啟動執行緒,於 contextDestroyed 中優雅關閉。

一、核心程式碼實作

package test;

import javax.servlet.*;

public class MyCode implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // Tomcat 啟動時自動執行
        new MyThread().start();
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // 應用關閉時執行清理邏輯
    }

    private static class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("背景執行緒已啟動:測試開始");
            // 此處放入長期運行的業務邏輯
        }
    }
}

二、web.xml 註冊監聽器

<listener>
  <listener-class>test.MyCode</listener-class>
</listener>

三、關鍵注意事項

  1. 執行緒安全:背景執行緒中若存取共享資源,需自行處理同步。
  2. 優雅關閉:在 contextDestroyed 中設定中斷旗標或呼叫 interrupt(),避免資源洩漏。
  3. 異常處理:執行緒內部的未捕獲異常不會傳播到主執行緒,建議使用 Thread.setDefaultUncaughtExceptionHandler 統一處理。
  4. 現代替代方案:Spring Boot 專案建議使用 @PostConstruct + @PreDestroy 或 CommandLineRunner / ApplicationRunner;或引入 Quartz、Spring Task 等排程框架。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved