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

Tomcat 啟動與關閉命令詳解:Bootstrap.jar 核心機制

     編輯:Java 相關知識

核心啟動類

Tomcat 核心啟動類為 org.apache.catalina.startup.Bootstrap,封裝於 %CATALINA_HOME%/bin/Bootstrap.jar。

手動建立啟動/關閉腳本

Windows (.bat)

REM startup.bat
java -jar Bootstrap.jar start

REM shutdown.bat
java -jar Bootstrap.jar stop

Linux/Unix (.sh)

# startup.sh
java -jar Bootstrap.jar start

# shutdown.sh
java -jar Bootstrap.jar stop

Bootstrap.main() 源碼深度解析

public static void main(String[] args) {
    // 1. JVM 版本檢查(需 J2SE 5.0+)
    try { new ObjectName("test:foo=bar"); }
    catch (Throwable t) {
        System.out.println("需 J2SE 5.0 或更新版本...");
        Thread.sleep(5000);
        return;
    }

    // 2. 單例模式取得 Bootstrap 實例
    if (daemon == null) {
        daemon = new Bootstrap();
        try { daemon.init(); }
        catch (Throwable t) { t.printStackTrace(); return; }
    }

    // 3. 解析命令參數(預設 start)
    String command = "start";
    if (args.length > 0) command = args[args.length - 1];

    try {
        if (command.equals("startd")) {      // 偵錯模式啟動
            args[0] = "start";
            daemon.load(args);
            daemon.start();
        } else if (command.equals("stopd")) { // 偵錯模式關閉
            args[0] = "stop";
            daemon.stop();
        } else if (command.equals("start")) {  // 正常啟動
            daemon.setAwait(true);             // 等待關閉信號
            daemon.load(args);
            daemon.start();
        } else if (command.equals("stop")) {   // 正常關閉
            daemon.stopServer(args);
        } else {
            log.warn("未知命令: " + command);
        }
    } catch (Throwable t) { t.printStackTrace(); }
}

關鍵流程說明

階段方法說明
初始化init()建立類載入器、解析 catalina.properties、註冊 MBean
載入配置load(args)讀取 server.xml、建立 StandardServer、Engine、Host、Context 等組件樹
啟動start()啟動連接器、部署 Web 應用、啟動背景執行緒
等待setAwait(true)主執行緒阻塞等待關閉指令(預設 port 8005)
關閉stop()/stopServer()觸發關閉鉤子、銷毀組件、釋放資源、關閉 JVM

常見參數變體

  • start:前景啟動,阻塞主執行緒(生產環境常用)
  • startd:偵錯模式,便於 IDE 附著除錯
  • stop:透過關閉埠發送 SHUTDOWN 指令
  • stopd:偵錯模式關閉

進階:自定義類載入器與安全管理員

Bootstrap.init() 會建立三層類載入器:

  1. commonLoader:$CATALINA_HOME/lib 共享庫
  2. catalinaLoader:Tomcat 內部類
  3. sharedLoader:應用共享庫(可選)

若啟用 SecurityManager,啟動腳本需加入 -Djava.security.manager -Djava.security.policy==$CATALINA_BASE/conf/catalina.policy。

最佳實踐建議

  1. 生產環境使用 startup.sh/shutdown.sh 官方腳本(含環境變數設定、PID 檢查、日誌導向)
  2. 容器化部署時,直接執行 java -jar Bootstrap.jar start 並捕獲標準輸出
  3. 優雅關閉:發送 SIGTERM 觸發 shutdown 鉤子,避免 kill -9 強制終止
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved