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

Tomcat 啟動超時排查:DAO 層文件缺失導致加載失敗

     編輯:Java 綜合教學

現象描述

Tomcat 啟動過程中長時間卡在加載階段,最終報超時錯誤。控制台無明確異常堆棧,僅顯示部署進度條停滯。

根因分析

經排查,DAO 層僅提交了映射 XML 文件,對應的 Java 接口或實體類未提交。導致 Spring/MyBatis 初始化時:

  1. 掃描到 XML 文件,解析 <mapper namespace="com.xxx.dao.UserDao">
  2. 嘗試加載 UserDao 接口類,ClassNotFoundException 被內部吞噬或包裹
  3. 初始化線程陷入無限等待或重試,阻塞 Tomcat 啟動線程
  4. 超過 server.xml 配置的 startStopThreads 超時時間,強制終止部署

解決方案

  1. 補全缺失文件:確保 DAO 接口、實體類、Mapper XML 三者同步提交
  2. 檢查打包配置:Maven <resources> 包含 **/*.xml,Java 源碼正常編譯輸出
  3. 啟用驗證:MyBatis 配置 validateMap=false 可緩解,但治標不治本
  4. 調大超時:臨時修改 server.xml <Engine> 的 startStopThreads 或 deploymentTimeout,僅作過渡

預防措施

  • CI/CD 流水線增加 編譯驗證 步驟:mvn compile 失敗即阻斷部署
  • 代碼評審檢查點:Mapper XML 的 namespace 是否與接口全限定名一致
  • 單元測試覆蓋:Spring 上下文加載測試,提前暴露 Bean 創建異常

相關配置參考

<!-- server.xml 增加部署超時(毫秒) -->
<Engine name="Catalina" defaultHost="localhost" deploymentTimeout="120000">
    <Host ...>
        <Context ... />
    </Host>
</Engine>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved