淺談springboot內(nèi)置tomcat和外部獨(dú)立部署tomcat的區(qū)別
前兩天,我去面了個試,面試官問了我個問題,獨(dú)立部署的tomcat跟springboot內(nèi)置的tomcat有什么區(qū)別,為什么存在要禁掉springboot的tomcat然后將項(xiàng)目部署到獨(dú)立的tomcat當(dāng)中?
我就想,不都一個樣?獨(dú)立部署的tomcat可以配置優(yōu)化?禁AJP,開多線程,開nio?而且springboot內(nèi)置的tomcat多方便,部署上服務(wù)器寫個java腳本運(yùn)行即可?,F(xiàn)在考慮下有什么條件能優(yōu)于內(nèi)置tomcat的。
1.tomcat的優(yōu)化配置多線程?內(nèi)置的也可以配置多線程
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
max-connections: 20000
2.tomcat禁用AJP?我啟動了個springboot項(xiàng)目,發(fā)現(xiàn)并沒有開啟AJP,同時用的是nio模式
3.tomcat修改運(yùn)行模式nio2?或者apr?我發(fā)現(xiàn)在網(wǎng)上查資料,可以找到springboot配置運(yùn)行模式的方法,但是可以說的一個點(diǎn)是tomcat修改配置會比springboot方便一些,畢竟springboot要寫類,寫配置再打包,再啟動。
4.jvm調(diào)優(yōu)?其實(shí)兩個都差不多,tomcat通關(guān)配置catalina.sh,springboot通過運(yùn)行腳本寫上就行了
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)存問題?好像沒誰說誰誰占用內(nèi)存高
6.獨(dú)立部署tomcat可以部署多個項(xiàng)目然后映射在同一個ip,例如我們把后臺系統(tǒng)和app系統(tǒng)分成了2個包部署?我們有nginx可以實(shí)現(xiàn)。但是這個時候要考慮是多個項(xiàng)目部署在一個tomcat好還是一個包一個tomcat,其實(shí)這個得看業(yè)務(wù)或者說個人選擇吧,多個項(xiàng)目部署在同一個tomcat啟動方便,不占用端口。一個tomcat部署一個包具有獨(dú)立性,互不影響,不會要掛一起掛。
7.部署更方便?tomcat上我們丟war包上去后,他會自動地去解包啟動,可以不需要重啟tomcat或者可以只替換某個文件部署,springboot的話需要重新打包再重啟。
個人總結(jié):
一般清空下,到底是使用內(nèi)置tomcat還是外置的,并沒有一個肯定的回答,都得看公司或者個人的需求,看好哪口,熟悉那種,根據(jù)需求來,并沒有誰的性能更好點(diǎn),而是誰更符合我,另外如果有人覺得我說的有什么問題,或者補(bǔ)充的可以評論給我建議,謝謝。
補(bǔ)充知識:SpringBoot項(xiàng)目部署到外部Tomcat,入口類不加載的問題解決過程
某一天,突然發(fā)現(xiàn)正在開發(fā)的Web項(xiàng)目無法訪問了??磍og,發(fā)現(xiàn)入口類不加載了。而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.……
隨之網(wǎng)上找了各種辦法,逐一嘗試均告失敗……
折騰了一整天,整個人快要崩潰了。
隨即通過git查看近期所有代碼修改的差異,終于發(fā)現(xiàn)是前一天腦袋一熱,pom中多加了這么一段依賴:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <scope>runtime</scope> </dependency>
刪除之,再次啟動tomcat,淚奔啊。終于OK了!
以上這篇淺談springboot內(nèi)置tomcat和外部獨(dú)立部署tomcat的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- vue+springboot項(xiàng)目上傳部署tomcat的方法實(shí)現(xiàn)
- vue打包部署到springboot并通過tomcat運(yùn)行的操作方法
- SpringBoot項(xiàng)目打包成war包并部署在tomcat上運(yùn)行的操作步驟
- SpringBoot項(xiàng)目打包部署到Tomcat的操作流程
- SpringBoot中jar打包并部署到Tomcat
- 詳解springboot項(xiàng)目帶Tomcat和不帶Tomcat的兩種打包方式
- SpringBoot項(xiàng)目打包發(fā)布到外部tomcat(出現(xiàn)各種異常的解決)
- springboot項(xiàng)目打包并部署到Tomcat上及報錯處理方案
相關(guān)文章
Java項(xiàng)目中如何引入Hutool工具類并正確使用它
Hutool是一個小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語言般的優(yōu)雅,這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目中如何引入Hutool工具類并正確使用它的相關(guān)資料,需要的朋友可以參考下2024-01-01Springboot?整合maven插口調(diào)用maven?release?plugin實(shí)現(xiàn)一鍵打包功能
這篇文章主要介紹了Springboot?整合maven插口調(diào)用maven?release?plugin實(shí)現(xiàn)一鍵打包功能,整合maven-invoker使程序去執(zhí)行mvn命令,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03Springboot整合微信支付(訂單過期取消及商戶主動查單)
本文主要介紹了Springboot整合微信支付(訂單過期取消及商戶主動查單),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Spring?Boot?3.2.5集成mysql的詳細(xì)步驟記錄
作為一名Java開發(fā)者,我們經(jīng)常需要在我們的應(yīng)用程序中使用數(shù)據(jù)庫,在Spring Boot中集成數(shù)據(jù)庫是非常容易的,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot?3.2.5集成mysql的詳細(xì)步驟,需要的朋友可以參考下2024-04-04Spring中的事件監(jiān)聽器使用學(xué)習(xí)記錄
Spring框架中的事件監(jiān)聽機(jī)制是一種設(shè)計模式,它允許你定義和觸發(fā)事件,同時允許其他組件監(jiān)聽這些事件并在事件發(fā)生時作出響應(yīng),這篇文章主要介紹了Spring中的事件監(jiān)聽器使用學(xué)習(xí),需要的朋友可以參考下2024-07-07