在tomcat下部署war包啟動時報錯,關鍵錯誤信息如下:
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1Boolean->org.bouncycastle.asn1.DERBoolean->org.bouncycastle.asn1.ASN1Boolean]
- 分析定位:
1)、從錯誤信息的紅色部分可以看出,程序中出現了循環依賴的類;
2)、tomcat在加載war前出錯;
3)、經分析是tomcat為了支持servlet3.0的特性,比如說支持@WebServlet、@WebListener等等,要支持這些特性,tomcat就得去掃描所有的jar包里面的每個類。這個異常表明在掃描jar包的時候,遞歸調用太深,導致棧溢出了,tomcat給了一個餿主意,讓你增大xss,這個還是不好,xss加大了,可用線程數就少了。
4)、程序中有多個包里存在org.bouncycastle.asn1.ASN1Boolean和org.bouncycastle.asn1.DERBoolean類,有bcprov-ext-jdk15on-1.54.jar、bcprov-jdk15on-1.54.jar 、fr-third-7.1.jar
- 解決辦法:
在tomcat的conf/ catalina.properties文件中排除對上述jar包的掃描,即:在conf/ catalina.properties文件中tomcat.util.scan.StandardJarScanFilter.jarsToSkip末尾增加:
bcpkix-*.jar,bcprov-*.jar,fr-*.jar