1. 程式人生 > 程式設計 >淺談springboot內建tomcat和外部獨立部署tomcat的區別

淺談springboot內建tomcat和外部獨立部署tomcat的區別

前兩天,我去面了個試,面試官問了我個問題,獨立部署的tomcat跟springboot內建的tomcat有什麼區別,為什麼存在要禁掉springboot的tomcat然後將專案部署到獨立的tomcat當中?

我就想,不都一個樣?獨立部署的tomcat可以配置優化?禁AJP,開多執行緒,開nio?而且springboot內建的tomcat多方便,部署上伺服器寫個java指令碼執行即可。現在考慮下有什麼條件能優於內建tomcat的。

1.tomcat的優化配置多執行緒?內建的也可以配置多執行緒

server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
max-connections: 20000

2.tomcat禁用AJP?我啟動了個springboot專案,發現並沒有開啟AJP,同時用的是nio模式

淺談springboot內建tomcat和外部獨立部署tomcat的區別

3.tomcat修改執行模式nio2?或者apr?我發現在網上查資料,可以找到springboot配置執行模式的方法,但是可以說的一個點是tomcat修改配置會比springboot方便一些,畢竟springboot要寫類,寫配置再打包,再啟動。

4.jvm調優?其實兩個都差不多,tomcat通關配置catalina.sh,springboot通過執行指令碼寫上就行了

tomcat:CATALINA_OPTS="$CATALINA_OPTS -server -Xms128m -Xmx1024m -XX:+UseG1GC"

springboot:java -jar -Xms128m -Xmx1024m -XX:+UseG1GC java-1.0.0.jar

5.考慮jar包和war包占用記憶體問題?好像沒誰說誰誰佔用記憶體高

6.獨立部署tomcat可以部署多個專案然後對映在同一個ip,例如我們把後臺系統和app系統分成了2個包部署?我們有nginx可以實現。但是這個時候要考慮是多個專案部署在一個tomcat好還是一個包一個tomcat,其實這個得看業務或者說個人選擇吧,多個專案部署在同一個tomcat啟動方便,不佔用埠。一個tomcat部署一個包具有獨立性,互不影響,不會要掛一起掛。

7.部署更方便?tomcat上我們丟war包上去後,他會自動地去解包啟動,可以不需要重啟tomcat或者可以只替換某個檔案部署,springboot的話需要重新打包再重啟。

個人總結:

一般清空下,到底是使用內建tomcat還是外接的,並沒有一個肯定的回答,都得看公司或者個人的需求,看好哪口,熟悉那種,根據需求來,並沒有誰的效能更好點,而是誰更符合我,另外如果有人覺得我說的有什麼問題,或者補充的可以評論給我建議,謝謝。

補充知識:SpringBoot專案部署到外部Tomcat,入口類不載入的問題解決過程

某一天,突然發現正在開發的Web專案無法訪問了。看log,發現入口類不載入了。而Tomcat是正常啟動的。

有這麼一段提示:

org.apache.jasper.servlet.TldScanner.scanJars 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.……

隨之網上找了各種辦法,逐一嘗試均告失敗……

折騰了一整天,整個人快要崩潰了。

隨即通過git檢視近期所有程式碼修改的差異,終於發現是前一天腦袋一熱,pom中多加了這麼一段依賴:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-web</artifactId>
  <scope>runtime</scope>
</dependency>

刪除之,再次啟動tomcat,淚奔啊。終於OK了!

以上這篇淺談springboot內建tomcat和外部獨立部署tomcat的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。