文章目錄
- 問題
- 解決
問題
将war包部署在Tomcat安裝路徑的webapps下,啟動Tomcat,在logs/catalina.out 日志檔案中發現如下錯誤,web程式也沒有運作起來:
Unable to complete the scan for annotations for web application [/xxxx] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
錯誤資訊,寫的還是挺清楚的:
不能完成注解的掃描,因為棧溢出錯誤。可能的原因是 -Xss的設定太小 和 非法的循環繼承依賴。
解決
有三種解決方式:
-
增加單個線程堆棧的大小:
如:-Xss4m
缺點:在相同實體記憶體下,增加這個值就減少了生成線程的數量
- 在web.xml中,添加
如果項目中沒有使用任何基于java servlet的配置,通過這個配置告訴Tomcat,不用去掃描該web程式。metadata-complete="true"
-
限制tomcat掃描的jar檔案
修改conf/catalina.properties 檔案,找到屬性:
tomcat.util.scan.StandardJarScanFilter.jarsToSkip
,在它的值後面加一個",*",這樣就不會掃描所有的jar包了。啟動更快,也不會出異常。
注意,因為它的值很長,所用用
連接配接,一定要找到結尾處。\
如果還是不能解決,根據日志,可以檢查下
非法的循環繼承依賴
的問題,檢查下項目的依賴關系。