最近使用tomcat8启动项目时,发现At least one JAR was scanned for TLDs yet contained no TLDs这一步加载时间非常长,
从网上收集了各种资料最终得以解决,整理了一下过程,希望能够帮到大家。
参考文章:https://blog.csdn.net/yasi_xi/article/details/49642661
注:${catalina.base}特指tomcat根目录
1)找到${catalina.base}/conf/logging.properties 文件,在文件末尾添加:
org.apache.catalina.startup.TldConfig.level = FINE
org.apache.jasper.compiler.TldLocationsCache.level = FINE
org.apache.jasper.servlet.TldScanner.level = FINE
2)重启Tomcat ,等完全成功启动后。此时,在${catalina.base}/logs/catalina.xxxx-xx-xx.log (xxxx-xx-xx为当前年月日)文件中能看到一下的log:
3)如果是linux环境,cd ${catalina.base}/logs/
egrep "No TLD files were found in [file:[^]+]" ${catalina.base}/catalina.out -o | egrep "[^]/]+.jar" -o | sort | uniq | sed -e 's/.jar/.jar,\/g' > skips.txt
如果是windows环境,可以使用notepad++匹配出所有jar,也可以自行使用命令匹配出所有jar(本人bat脚本写的不熟练,这里也没去研究)
4)总之最终得到的结果如下:
jcl-over-slf4j-1.7.25.jar,
jcifs-1.3.17.jar,
urlrewritefilter-4.0.4.jar,
spring-webmvc-portlet-4.3.10.RELEASE.jar,
spring-instrument-4.3.10.RELEASE.jar,
aopalliance-1.0.jar,
commons-email-1.5.jar,
jaxws-api-2.2.10.jar,
jsr173_api-1.0.jar,
fastjson-1.2.47.jar
spring-context-4.3.10.RELEASE.jar,
commons-configuration-1.10.jar
javax.persistence-2.0.0.jar
javax.mail-1.5.6.jar,
spring-test-4.3.10.RELEASE.jar
jstl-1.2.jar
xml-apis-1.0.b2.jar,
commons-net-3.6.jar,
6)将上面的结果放到 ${catalina.base}/conf/catalina.properties 文件中的 “tomcat.util.scan.StandardJarScanFilter.jarsToSkip=” 处,保存该文件,结果如下(这里支持通配符,例如spring*.jar):
5)注释掉步骤1中在 logging.properties 中添加的三行代码,删除 ${catalina.base}/work 下的所有内容,重启 Tomcat
#org.apache.catalina.startup.TldConfig.level = FINE
#org.apache.jasper.compiler.TldLocationsCache.level = FINE
#org.apache.jasper.servlet.TldScanner.level = FINE
重启后,Tomcat 将不再对步骤4中配置 jar 文件做 TLDs 扫描,tomcat启动速度也会显著加快。