淺談springboot內(nèi)置tomcat和外部獨(dú)立部署tomcat的區(qū)別
前兩天,我去面了個(gè)試,面試官問(wèn)了我個(gè)問(wèn)題,獨(dú)立部署的tomcat跟springboot內(nèi)置的tomcat有什么區(qū)別,為什么存在要禁掉springboot的tomcat然后將項(xiàng)目部署到獨(dú)立的tomcat當(dāng)中?
我就想,不都一個(gè)樣?獨(dú)立部署的tomcat可以配置優(yōu)化?禁AJP,開(kāi)多線程,開(kāi)nio?而且springboot內(nèi)置的tomcat多方便,部署上服務(wù)器寫(xiě)個(gè)java腳本運(yùn)行即可。現(xiàn)在考慮下有什么條件能優(yōu)于內(nèi)置tomcat的。
1.tomcat的優(yōu)化配置多線程??jī)?nèi)置的也可以配置多線程
server:tomcat:uri-encoding: UTF-8max-threads: 1000max-connections: 20000
2.tomcat禁用AJP?我啟動(dòng)了個(gè)springboot項(xiàng)目,發(fā)現(xiàn)并沒(méi)有開(kāi)啟AJP,同時(shí)用的是nio模式
3.tomcat修改運(yùn)行模式nio2?或者apr?我發(fā)現(xiàn)在網(wǎng)上查資料,可以找到springboot配置運(yùn)行模式的方法,但是可以說(shuō)的一個(gè)點(diǎn)是tomcat修改配置會(huì)比springboot方便一些,畢竟springboot要寫(xiě)類(lèi),寫(xiě)配置再打包,再啟動(dòng)。
4.jvm調(diào)優(yōu)?其實(shí)兩個(gè)都差不多,tomcat通關(guān)配置catalina.sh,springboot通過(guò)運(yùn)行腳本寫(xiě)上就行了
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包占用內(nèi)存問(wèn)題?好像沒(méi)誰(shuí)說(shuō)誰(shuí)誰(shuí)占用內(nèi)存高
6.獨(dú)立部署tomcat可以部署多個(gè)項(xiàng)目然后映射在同一個(gè)ip,例如我們把后臺(tái)系統(tǒng)和app系統(tǒng)分成了2個(gè)包部署?我們有nginx可以實(shí)現(xiàn)。但是這個(gè)時(shí)候要考慮是多個(gè)項(xiàng)目部署在一個(gè)tomcat好還是一個(gè)包一個(gè)tomcat,其實(shí)這個(gè)得看業(yè)務(wù)或者說(shuō)個(gè)人選擇吧,多個(gè)項(xiàng)目部署在同一個(gè)tomcat啟動(dòng)方便,不占用端口。一個(gè)tomcat部署一個(gè)包具有獨(dú)立性,互不影響,不會(huì)要掛一起掛。
7.部署更方便?tomcat上我們丟war包上去后,他會(huì)自動(dòng)地去解包啟動(dòng),可以不需要重啟tomcat或者可以只替換某個(gè)文件部署,springboot的話需要重新打包再重啟。
個(gè)人總結(jié):
一般清空下,到底是使用內(nèi)置tomcat還是外置的,并沒(méi)有一個(gè)肯定的回答,都得看公司或者個(gè)人的需求,看好哪口,熟悉那種,根據(jù)需求來(lái),并沒(méi)有誰(shuí)的性能更好點(diǎn),而是誰(shuí)更符合我,另外如果有人覺(jué)得我說(shuō)的有什么問(wèn)題,或者補(bǔ)充的可以評(píng)論給我建議,謝謝。
補(bǔ)充知識(shí):SpringBoot項(xiàng)目部署到外部Tomcat,入口類(lèi)不加載的問(wèn)題解決過(guò)程
某一天,突然發(fā)現(xiàn)正在開(kāi)發(fā)的Web項(xiàng)目無(wú)法訪問(wèn)了。看log,發(fā)現(xiàn)入口類(lèi)不加載了。而Tomcat是正常啟動(dòng)的。
有這么一段提示:
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.……
隨之網(wǎng)上找了各種辦法,逐一嘗試均告失敗……
折騰了一整天,整個(gè)人快要崩潰了。
隨即通過(guò)git查看近期所有代碼修改的差異,終于發(fā)現(xiàn)是前一天腦袋一熱,pom中多加了這么一段依賴:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <scope>runtime</scope></dependency>
刪除之,再次啟動(dòng)tomcat,淚奔啊。終于OK了!
以上這篇淺談springboot內(nèi)置tomcat和外部獨(dú)立部署tomcat的區(qū)別就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 解決Python數(shù)據(jù)可視化中文部分顯示方塊問(wèn)題2. Python基于traceback模塊獲取異常信息3. ASP編碼必備的8條原則4. python開(kāi)發(fā)一個(gè)解析protobuf文件的簡(jiǎn)單編譯器5. 利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼6. python 繪制斜率圖進(jìn)行對(duì)比分析7. 解決Python 函數(shù)聲明先后順序出現(xiàn)的問(wèn)題8. Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)9. python GUI模擬實(shí)現(xiàn)計(jì)算器10. 深入理解JavaScript字節(jié)二進(jìn)制知識(shí)以及相關(guān)API
