最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot內(nèi)置服務器(Tomcat/Jetty/Undertow)切換的操作指南

 更新時間:2026年03月25日 08:51:19   作者:希望永不加班  
本文介紹了如何在SpringBoot中切換內(nèi)置服務器(Tomcat、Jetty和Undertow),分析了它們的核心差異和適用場景,通過修改pom.xml和application.yml文件,可以實現(xiàn)服務器的切換和自定義配置,最后給出了選型建議和注意事項,需要的朋友可以參考下

用 SpringBoot 開發(fā)時,你可能從沒關(guān)注過“服務器”這件事——點一下啟動,接口就能訪問,默認用的是 Tomcat。但實際開發(fā)中,不同場景需要不同的服務器:比如追求高性能選 Undertow,追求輕量選 Jetty,兼容老項目選 Tomcat。

今天就手把手教你:SpringBoot 里怎么切換內(nèi)置服務器(Tomcat→Jetty→Undertow),以及三種服務器的核心區(qū)別、選型建議——純實操,改幾行配置就能搞定,再也不用被“默認 Tomcat”綁死。

先搞懂:SpringBoot 為啥能“內(nèi)置”服務器?

SpringBoot 之所以能一鍵啟動,核心是把 Tomcat/Jetty/Undertow 這些 Web 服務器打包成了依賴,啟動時自動初始化,不用我們手動安裝、配置。

核心邏輯:

spring-boot-starter-web
  •  依賴默認引入 spring-boot-starter-tomcat(內(nèi)置 Tomcat);
  • 切換服務器的本質(zhì):排除默認的 Tomcat 依賴,引入目標服務器的 Starter 依賴;
  • 所有服務器都適配 SpringBoot 的 WebServer 接口,切換后代碼無需任何改動。

先看三款內(nèi)置服務器的核心差異(新手先記結(jié)論):

特性Tomcat(默認)JettyUndertow
核心優(yōu)勢生態(tài)完善、兼容性好、文檔多輕量、啟動快、適合長連接(WebSocket)高性能、低內(nèi)存、并發(fā)能力強
核心劣勢內(nèi)存占用較高、并發(fā)性能一般并發(fā)性能弱于 Undertow功能比 Tomcat 少、文檔相對少
適用場景通用場景、傳統(tǒng) Web 項目、新手輕量應用、WebSocket 應用(如聊天)高并發(fā)接口、微服務、性能敏感場景
內(nèi)存占用(同等配置)
并發(fā)處理能力中低

默認服務器——Tomcat

SpringBoot 項目只要引入 spring-boot-starter-web,就自動用 Tomcat 作為內(nèi)置服務器:

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<dependency>

啟動項目,日志里會看到 Tomcat 啟動的痕跡:

2026-03-19 10:00:00.000  INFO 12345 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2026-03-19 10:00:00.123  INFO 12345 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http)

如果想自定義 Tomcat 配置(比如調(diào)線程數(shù)、最大連接數(shù)),在 application.yml 里加:

server:
tomcat:
max-threads:200# 最大工作線程數(shù)(默認200)
min-spare-threads:20# 最小空閑線程數(shù)
max-connections:10000# 最大連接數(shù)
accept-count:100# 連接隊列長度(滿了之后新請求會被拒絕)

切換到 Jetty

Jetty 比 Tomcat 更輕量,啟動更快,對 WebSocket 支持更友好(比如做即時聊天、消息推送項目)。

第一步:排除 Tomcat 依賴,引入 Jetty 依賴

修改 pom.xml,核心是“先排除、再引入”:

<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<exclusion>
<exclusions>
<dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jettyartifactId>
<dependency>
<dependencies>

第二步:啟動項目,驗證切換成功

啟動日志里會看到 Jetty 相關(guān)輸出,說明切換成功:

2026-03-19 10:01:00.000  INFO 67890 --- [           main] o.e.j.s.Server                          : jetty-11.0.18; built: 2024-01-01T00:00:00Z; git: abc123; jvm 17.0.10
2026-03-19 10:01:00.123  INFO 67890 --- [           main] o.e.j.w.StandardDescriptorProcessor     : NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2026-03-19 10:01:00.456  INFO 67890 --- [           main] o.s.b.web.embedded.jetty.JettyWebServer  : Jetty started on port 8080 (http) with context path '/'

第三步:自定義 Jetty 配置(可選)

在 application.yml 里調(diào)整 Jetty 參數(shù):

server:
jetty:
acceptors:4# 接受連接的線程數(shù)(默認CPU核心數(shù))
selectors:8# 處理IO的線程數(shù)
max-http-post-size: 10MB  # 最大POST請求大小

切換到 Undertow

Undertow 是 RedHat 開源的服務器,性能吊打 Tomcat/Jetty,內(nèi)存占用最低,適合高并發(fā)的微服務接口。

第一步:排除 Tomcat 依賴,引入 Undertow 依賴

同樣修改 pom.xml

<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<exclusion>
<exclusions>
<dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-undertowartifactId>
<dependency>
<dependencies>

第二步:啟動驗證,查看日志

啟動日志里出現(xiàn) Undertow 標識,說明切換成功:

2026-03-19 10:02:00.000  INFO 11223 --- [           main] io.undertow.servlet.core.ApplicationDeploymentManager : starting deployment of web application directory /tmp/tomcat.12345/webapps/ROOT
2026-03-19 10:02:00.345  INFO 11223 --- [           main] o.s.b.web.embedded.undertow.UndertowWebServer  : Undertow started on port 8080 (http) with context path '/'

第三步:自定義 Undertow 配置(性能調(diào)優(yōu))

Undertow 的性能調(diào)優(yōu)主要在線程數(shù)和連接數(shù),配置 application.yml

server:
undertow:
# IO 線程數(shù)(默認CPU核心數(shù)*2),處理連接接受、請求分發(fā)
io-threads:8
# 工作線程數(shù)(默認IO線程數(shù)*8),處理具體的業(yè)務請求
worker-threads:64
# 最大請求大小
max-http-post-size: 10MB
# 開啟HTTP2(可選,需要HTTPS)
    http2:
enabled:true

調(diào)優(yōu)建議:IO 線程數(shù)設(shè)為 CPU 核心數(shù)2,工作線程數(shù)設(shè)為 IO 線程數(shù)8~16,根據(jù)服務器配置調(diào)整。

必避的 3 個坑

只引入新服務器依賴,沒排除 Tomcat
結(jié)果:項目啟動報錯(依賴沖突),日志里同時出現(xiàn) Tomcat 和 Jetty/Undertow;
解決:必須先排除 spring-boot-starter-tomcat,再引入目標服務器依賴。

切換后接口訪問 404
原因:服務器切換不影響業(yè)務代碼,大概率是其他配置問題(比如端口錯、Controller 沒掃描到);
解決:檢查 server.port、主啟動類包層級、@RestController 注解是否正確。

Undertow 開啟 HTTP2 但沒配 HTTPS
結(jié)果:啟動報錯,HTTP2 必須基于 HTTPS;
解決:要么關(guān)閉 HTTP2,要么配置 SSL 證書(生產(chǎn)環(huán)境再配)。

生產(chǎn)環(huán)境選型建議(按場景選)

不用盲目追求“高性能”,按實際需求選:

新手/通用場景:選 Tomcat(文檔多、問題好排查、兼容性最好);

WebSocket 應用(聊天、推送):選 Jetty(對長連接支持更優(yōu));

高并發(fā)微服務接口:選 Undertow(性能最高、內(nèi)存占用最低);

老項目遷移:選 Tomcat(和傳統(tǒng) Web 項目兼容最好);

容器化部署(Docker/K8s):選 Undertow(鏡像體積更小,資源占用低)。

最后說兩句

SpringBoot 切換內(nèi)置服務器的核心就兩步:

  • 排除默認的 Tomcat 依賴;
  • 引入目標服務器(Jetty/Undertow)的 Starter 依賴。

三款服務器沒有“最好”,只有“最適合”——大部分場景用 Tomcat 足夠,追求性能選 Undertow,追求輕量選 Jetty。

以上就是SpringBoot內(nèi)置服務器(Tomcat/Jetty/Undertow)切換的操作指南的詳細內(nèi)容,更多關(guān)于SpringBoot內(nèi)置服務器切換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java實現(xiàn)多人聊天室可視化

    java實現(xiàn)多人聊天室可視化

    這篇文章主要為大家詳細介紹了java實現(xiàn)多人聊天室可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java詳細解析下拉菜單和彈出菜單的使用

    Java詳細解析下拉菜單和彈出菜單的使用

    這篇文章主要介紹了怎么用Java來創(chuàng)建和使用下拉菜單和彈出菜單,下拉菜單和彈出菜單是我們經(jīng)常要用的工具,但是你有想過自己怎么去實現(xiàn)它嗎,感興趣的朋友跟隨文章往下看看吧
    2022-04-04
  • java byte與base64的互轉(zhuǎn)的實現(xiàn)示例

    java byte與base64的互轉(zhuǎn)的實現(xiàn)示例

    在項目開發(fā)中經(jīng)常用到,比如前端上送文件流(byte[])到后臺并轉(zhuǎn)成文件,本文主要介紹了java byte與base64的互轉(zhuǎn)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Springboot結(jié)合rabbitmq實現(xiàn)的死信隊列

    Springboot結(jié)合rabbitmq實現(xiàn)的死信隊列

    為了保證訂單業(yè)務的消息數(shù)據(jù)不丟失,需要使用到RabbitMQ的死信隊列機制,本文主要介紹了Springboot結(jié)合rabbitmq實現(xiàn)的死信隊列,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • JAVA保證HashMap線程安全的幾種方式

    JAVA保證HashMap線程安全的幾種方式

    HashMap是線程不安全的,這意味著如果多個線程并發(fā)地訪問和修改同一個HashMap實例,可能會導致數(shù)據(jù)不一致和其他線程安全問題,本文主要介紹了JAVA保證HashMap線程安全的幾種方式,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • java 多線程的幾種實現(xiàn)方法總結(jié)

    java 多線程的幾種實現(xiàn)方法總結(jié)

    這篇文章主要介紹了java 多線程的幾種實現(xiàn)方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握java多線程的知識,需要的朋友可以參考下
    2017-10-10
  • maven為MANIFEST.MF文件添加內(nèi)容的方法

    maven為MANIFEST.MF文件添加內(nèi)容的方法

    這篇文章主要介紹了maven為MANIFEST.MF文件添加內(nèi)容的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • java有界類型參數(shù)的實例用法

    java有界類型參數(shù)的實例用法

    小編給大家整理了一篇關(guān)于java有界類型參數(shù)的使用的相關(guān)文章及擴展實例內(nèi)容,有需要的朋友們可以學習參考下。
    2021-07-07
  • java使用spring實現(xiàn)讀寫分離的示例代碼

    java使用spring實現(xiàn)讀寫分離的示例代碼

    本篇文章主要介紹了java使用spring實現(xiàn)讀寫分離的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • java實現(xiàn)圖片轉(zhuǎn)base64字符串 java實現(xiàn)base64字符串轉(zhuǎn)圖片

    java實現(xiàn)圖片轉(zhuǎn)base64字符串 java實現(xiàn)base64字符串轉(zhuǎn)圖片

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖片轉(zhuǎn)base64字符串,java實現(xiàn)base64字符串轉(zhuǎn)圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論

新宾| 滦平县| 黑龙江省| 阳东县| 南陵县| 于都县| 光泽县| 岳阳市| 宁河县| 高阳县| 黔南| 蛟河市| 浦城县| 勃利县| 龙胜| 武山县| 曲周县| 罗城| 西畴县| 翁源县| 伊宁县| 财经| 饶阳县| 扬中市| 旬阳县| 张掖市| 进贤县| 融水| 封丘县| 濮阳县| 和田县| 武胜县| 长治县| 三门峡市| 长岭县| 涪陵区| 平谷区| 建瓯市| 达州市| 大同县| 岱山县|