一、文章前言
本文是親測有效解決At least one JAR was scanned for TLDs yet contained no TLDs問題,絕對不是為了積分隨便粘貼復制然后壓根都沒有用系列
二、問題描述
1.今天測試發現Tomcat啟動賊慢,當然這個不是隨機數問題,而是每次卡在At least one JAR was scanned for TLDs yet contained no TLDs這個位置要好半天,而且還是在只有一個項目的情況下!
2.參考別的文章說編輯logging.properties 文件,在文件末尾添加,org.apache.jasper.servlet.TldScanner.level = FINE,啟動服務器,然后在控制台看到什么No的輸出提示,保存在某一個文件中,然后接下來將文件中提示的jar包再添加到catalina.properties 文件中的 tomcat.util.scan.StandardJarScanFilter.jarsToSkip的后面,問題能暫時解決,然后你會發下以下幾個問題
起作用了,但是當你新加一個jar包不符合規范,煩人的提示又開始了
只適用於服務器內項目已經固定了的情況,新建一個不同類項目問題又出現
3.想過直接關閉TLD檢查,在 conf/context.xml的<Context>中添加processTlds="false"也不起作用
三、問題原因
1.出現這個問題的原因就是Tomcat啟動時會掃描大量jar包,如果含有不符合TLD規范的就會出現這個問題
2.以后基本上不會使用JSP作為視圖層,所以我們可能根本不需要TLD這個東西,就算不要TLD也沒有什么關系
3.注意兩個啟動:一個是從tomcat的bin目錄中啟動,另外一個是從Eclipse中或者別的軟件中啟動,注意看Eclipse啟動部分
四、問題解決
4.1 解決步驟
1.可以在Tomcat安裝目錄下apache-tomcat-9.0.1\conf\catalina.properties文件中看到有以下一串代碼,代表的是在啟動Tomcat需要跳過檢查的jar包
2.那么解決辦法就是跳過所以jar包的TLD檢查,將所有tomcat.util.scan.StandardJarScanFilter.jarsToSkip=后面的所有通過\連接的這些.jar全部刪除(操作之前請備份源文件),直接給tomcat.util.scan.StandardJarScanFilter.jarsToSkip賦值"*.jar","*.jar"代表跳過所有以.jar結尾的文件,示例如下
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
3.刪除tomcat的work目錄中的所有文件避免緩存干擾;清空所有logs目錄中的日志文件,為了方便查看日志文件
4.2 從Tomcat的Bin目錄中啟動服務器
1.現在到bin目錄中找到startup.bat(windows:雙擊即可運行)或startup.sh(Linux:命令 "./startup.sh" 運行)進行啟動,發現啟動超快,只需要807毫秒
5.注意:這里只是直接在bin中啟動了tomcat服務器,接下來是從Eclipse配置tomcat,通過Eclipse啟動服務器
4.3 Eclipse啟動Tomcat
1.如果原來就已經配置過該Tomcat的會發現在Eclipse中啟動還是老樣子,每次卡在TLD那里,感覺根本沒有解決,原因如下
Eclipse沒有使用配置過的Tomcat,而是使用了自帶的Tomcat
Eclipse中原來配置過該Tomcat,因為Tomcat緩存導致沒有生效
2. 接下在最重要的一步就是刪除Eclipse原來配置過的服務器,單擊右鍵選擇刪除即可
3.創建新的運行環境,改成現在新配置的Tomcat,這樣才能讓配置生效,配置Tomcat服務器參考文章:https://blog.csdn.net/sinat_34104446/article/details/82721884
4.創建新的服務器之后啟動只要482ms