Tomcat spring boot 項目啓動慢的問題

清理不必要的 Web 應用

首先我們要做的是刪除掉 webapps 文件夾下不需要的工程,一般是 host-manager、example、doc 等這些默認的工程,可能還有以前添加的但現在用不着的工程,最好把這些全都刪除掉。如果你看過 Tomcat 的啓動日誌,可以發現每次啓動 Tomcat,都會重新佈署這些工程。

清理 JAR 文件

我們還可以刪除所有不需要的 JAR 文件。JVM 的類加載器在加載類時,需要查找每一個 JAR 文件,去找到所需要的類。如果刪除了不需要的 JAR 文件,查找的速度就會快一些。這裏請注意:Web 應用中的 lib 目錄下不應該出現 Servlet API 或者 Tomcat 自身的 JAR,這些 JAR 由 Tomcat 負責提供。如果你是使用 Maven 來構建你的應用,對 Servlet API 的依賴應該指定爲provided。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--用於編譯jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

關閉mysql SSL鏈接


mysql的高版本默認要求使用SSL鏈接,所以在沒有配置SSL也沒有說SSL不需要時,就會一直驗證,驗證好幾遍以後放棄。
解決辦法在鏈接參數里加上

spring.datasource.çurl=jdbc:mysql://localhost:3306/mark?useUnicode=true&characterEncoding=utf-8&useSSL=false

禁止 Tomcat TLD 掃描

Tomcat 爲了支持 JSP,在應用啓動的時候會掃描 JAR 包裏面的 TLD 文件,加載裏面定義的標籤庫,所以在 Tomcat 的啓動日誌裏,你可能會碰到這種提示:

At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

Tomcat 的意思是,我掃描了你 Web 應用下的 JAR 包,發現 JAR 包裏沒有 TLD 文件。我建議配置一下 Tomcat 不要去掃描這些 JAR 包,這樣可以提高 Tomcat 的啓動速度,並節省 JSP 編譯時間。

禁止TLD掃描

如果你的項目沒有使用 JSP 作爲 Web 頁面模板,而是使用 Velocity 之類的模板引擎,你完全可以把 TLD 掃描禁止掉。方法是,找到 Tomcat 的conf/目錄下的context.xml文件,在這個文件裏 Context 標籤下,加上 JarScanner 和 JarScanFilter 子標籤,像下面這樣。


指定掃描的jar包

1: 開啓掃描的日誌, 方便知道那些包裏有TLD 文件 logging.properties

org.apache.jasper.servlet.TldScanner.level = FINE

2: 把需要掃描的包加到 catalina.properties裏

tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
log4j-taglib*.jar,\
log4j-web*.jar,\
log4javascript*.jar,\
slf4j-taglib*.jar,\
javamelody-core*.jar,\
spring-webmvc*.jar,\
jstl*.jar,\
shiro-web*.jar

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
*.jar

如果是Intellij集成的時候部署慢,需要把部署方式改成 war:exploded

這樣就不需要在解壓打好的war包了,如下圖所示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章