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

SpringBoot配置Tomcat容器、Jetty容器、Undertow容器全過程

 更新時間:2025年11月28日 09:04:51   作者:CodeDevMaster  
Spring Boot默認集成的三大容器:Tomcat、Jetty和Undertow,Tomcat是輕量級Servlet容器,Jetty是開源的Servlet容器,Undertow是高性能Web服務(wù)器,Tomcat和Jetty在性能和內(nèi)存使用方面都優(yōu)于Undertow,但在并發(fā)量高的情況下,Undertow的性能更優(yōu)

Tomcat、Jetty、Undertow

Undertow、tomcat、jetty是Spring Boot 默認集成的三大容器。

Tomcat概述

  • Tomcat是Apache基金下的一個輕量級的Servlet容器,支持Servlet和JSP。
  • Tomcat具有Web服務(wù)器特有的功能,包括 Tomcat管理和控制平臺、安全 局管理和Tomcat閥等。
  • Tomcat本身包含了HTTP服務(wù)器,因此也可以視作單獨的Web服務(wù)器。Tomcat是完全免費的,深受開發(fā)者的喜愛。

Jetty概述

  • Jetty 是一個開源的servlet容器,它為基于Java的web容器,例如JSP和servlet提供運行環(huán)境。
  • Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發(fā)布。
  • 開發(fā)人員可以將Jetty容器實例化成一個對象,可以迅速為一些獨立運行的Java應(yīng)用提供網(wǎng)絡(luò)和web連接。

Undertow概述

  • Undertow是Red Hat公司的開源產(chǎn)品, 它完全采用Java語言開發(fā),是一款靈活的高性能Web服務(wù)器,支持阻塞IO和非阻塞IO。
  • 由于Undertow采用Java語言開發(fā),可以直接嵌入到Java項目中使用。同時, Undertow完全支持Servlet和Web Socket,在高并發(fā)情況下表現(xiàn)非常出色。

Spring Boot配置Tomcat容器

  • GitHub地址:https://github.com/apache/tomcat
  • Tomcat也是Spring Boot默認集成的三大容器之一。
  • Tomcat是SpringBoot默認的容器技術(shù),性能和內(nèi)存使用方面都要弱于Jetty、Undertow。

添加依賴

Tomcat是SpringBoot默認的容器技術(shù),故引入Web組件即可直接使用。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

啟動日志

10:47:34.545  INFO 40500 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
10:47:34.594  INFO 40500 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8888 (http) with context path ''
10:47:34.607  INFO 40500 --- [  restartedMain] cn.ybzy.demo.Application                 : Started Application in 5.125 seconds (JVM running for 6.656)

Spring Boot配置Undertow容器

  • GitHub地址:https://github.com/undertow-io/undertow
  • Undertow是Spring Boot默認集成的三大容器之一。
  • Tomcat是SpringBoot默認的容器技術(shù),同時SpringBoot也支持Undertow容器,而Undertow的性能和內(nèi)存使用方面都優(yōu)于Jetty、Tomcat。

添加依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 移除掉默認支持的 Tomcat -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 添加 Undertow 容器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

啟動日志

10:54:25.222  INFO 31904 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
10:54:25.253  INFO 31904 --- [  restartedMain] io.undertow                              : starting server: Undertow - 2.1.5.Final
10:54:25.260  INFO 31904 --- [  restartedMain] org.xnio                                 : XNIO version 3.8.0.Final
10:54:25.266  INFO 31904 --- [  restartedMain] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.0.Final
10:54:25.311  INFO 31904 --- [  restartedMain] org.jboss.threads                        : JBoss Threads version 3.1.0.Final
10:54:25.357  INFO 31904 --- [  restartedMain] o.s.b.w.e.undertow.UndertowWebServer     : Undertow started on port(s) 8888 (http)
10:54:25.367  INFO 31904 --- [  restartedMain] cn.ybzy.demo.Application                 : Started Application in 4.878 seconds (JVM running for 6.32)

配置

Undertow的配置與使用Tomcat時配置類似 , 將Tomcat字段改為undertow即可

# 日志存放目錄
server.undertow.accesslog.dir=

# 是否啟動日志
server.undertow.accesslog.enabled=false 

# 日志格式
server.undertow.accesslog.pattern=common

# 日志文件名前綴
server.undertow.accesslog.prefix=access_log

# 日志文件名后綴
server.undertow.accesslog.suffix=log

# HTTP POST請求最大的大小
server.undertow.max-http-post-size=-1

# 允許的最大 cookie 數(shù)量
server.undertow.max-cookies=100

# 允許的最大請求頭數(shù)量
server.undertow.max-header-size=100

# 允許的最大請求行數(shù)量
server.undertow.max-request-lines=100

# 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會負責(zé)多個連接, 默認設(shè)置每個CPU核心一個線程
server.undertow.threads.io=4

# 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設(shè)置取決于系統(tǒng)的負載
server.undertow.threads.worker=20

# 每塊buffer的空間大小,越小的空間被利用越充分,buffer會用于服務(wù)器連接的IO操作,類似netty的池化內(nèi)存管理
server.undertow.buffer-size=1024

# 是否分配的直接內(nèi)存
server.undertow.direct-buffers=true

# 是否啟用SSL
server.undertow.https.enabled=false

Spring Boot配置Jetty容器

  • GitHub地址:https://github.com/eclipse/jetty.project
  • Jetty也是Spring Boot默認集成的三大容器之一。
  • Tomcat是SpringBoot默認的容器技術(shù),同時SpringBoot也支持Jetty容器,而Jetty的性能和內(nèi)存使用方面都優(yōu)于Tomcat,弱于Undertow。

添加依賴

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 移除掉默認支持的 Tomcat -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 添加jetty容器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

啟動日志

注意:這里啟動時間更短是由于更換了性能更高的電腦,Jetty不做過多測試。

INFO 15196 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
INFO 15196 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
INFO 15196 --- [  restartedMain] o.e.j.s.h.ContextHandler.application     : Initializing Spring DispatcherServlet 'dispatcherServlet'
INFO 15196 --- [  restartedMain] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms
INFO 15196 --- [  restartedMain] o.e.jetty.server.AbstractConnector       : Started ServerConnector@60c0e4a0{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
INFO 15196 --- [  restartedMain] o.s.b.web.embedded.jetty.JettyWebServer  : Jetty started on port(s) 8080 (http/1.1) with context path '/'
INFO 15196 --- [  restartedMain] com.example.demo.DemoApplication         : Started DemoApplication in 1.088 seconds (JVM running for 2.195)

Tomcat與Undertow容器性能對比

使用JDK自帶的jvisualvm.exe工具對比各項指標情況:

Tomcat容器測試

相同項目環(huán)境下啟動,Tomcat 大約使用150M的堆內(nèi)存以及大約31個線程數(shù)

閑置狀態(tài)下,大概2分鐘后堆內(nèi)存與線程占用有所下降

當(dāng)發(fā)送大量請求時,堆內(nèi)存有明顯增長。

Undertow容器測試

相同項目環(huán)境下啟動,Tomcat啟動時大約使用150M的堆內(nèi)存,然后很快降低到使用50MB的堆內(nèi)存,以及大約24個線程數(shù)

當(dāng)發(fā)送大量請求時,堆內(nèi)存的占用增長不明顯。

總結(jié)

在并發(fā)量不高的情況下 , Tomcat與undertow的吞吐量區(qū)別不大 , 并發(fā)量高的情況下 , undertow的性能要優(yōu)于Jetty與Tomcat。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設(shè)計模式之單一職責(zé)原則精解

    Java設(shè)計模式之單一職責(zé)原則精解

    設(shè)計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。本篇介紹設(shè)計模式七大原則之一的單一職責(zé)原則
    2022-02-02
  • SpringCloud 中使用 Ribbon的方法詳解

    SpringCloud 中使用 Ribbon的方法詳解

    本文重點給大家介紹SpringCloud 中使用 Ribbon的方法,本文通過實例文字相結(jié)合的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2018-10-10
  • 面試官:java ThreadLocal真的會造成內(nèi)存泄露嗎

    面試官:java ThreadLocal真的會造成內(nèi)存泄露嗎

    ThreadLocal,java面試過程中的“釘子戶”,在網(wǎng)上也充斥著各種有關(guān)ThreadLocal內(nèi)存泄露的問題,本文換個角度,先思考ThreadLocal體系中的ThreadLocalMap為什么要設(shè)計成弱引用
    2021-08-08
  • 詳解Java中的四種引用類型(強軟弱虛)

    詳解Java中的四種引用類型(強軟弱虛)

    Java中的引用類型主要分為四種,分別是強引用、軟引用、弱引用和虛引用,這篇文章主要為大家詳細介紹了四者的使用與區(qū)別,需要的小伙伴可以參考下
    2023-10-10
  • 如何基于springcloud模擬RPC調(diào)用(Feign)

    如何基于springcloud模擬RPC調(diào)用(Feign)

    這篇文章主要介紹了如何基于springcloud模擬RPC調(diào)用(Feign),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式

    SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式

    這篇文章主要介紹了SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖源碼解析

    Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖源碼解析

    這篇文章主要介紹了Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖,本文通過案例源碼分析給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Java中調(diào)用第三方接口的詳細代碼示例

    Java中調(diào)用第三方接口的詳細代碼示例

    這篇文章主要介紹了Java中調(diào)用第三方接口的詳細代碼示例,文章總結(jié)了多種Java進行HTTP請求的方法,每種方法都有其特點和適用場景,從原生到封裝,再到聲明式客戶端,滿足了不同復(fù)雜度的HTTP請求需求,需要的朋友可以參考下
    2024-12-12
  • 關(guān)于Spring中一級緩存、二級緩存和三級緩存的那些事

    關(guān)于Spring中一級緩存、二級緩存和三級緩存的那些事

    Spring解決循環(huán)依賴的核心思想在于提前曝,下面這篇文章主要給大家介紹了關(guān)于Spring中一級緩存、二級緩存和三級緩存的那些事,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Spring Data中domain模塊的使用

    Spring Data中domain模塊的使用

    Spring Data是一個流行的數(shù)據(jù)訪問框架,本文主要介紹了Spring Data中domain模塊的使用,并展示如何使用它來優(yōu)化我們的數(shù)據(jù)訪問層,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論

罗山县| 连城县| 兴和县| 江源县| 灵丘县| 福建省| 牙克石市| 孟连| 阳江市| 柞水县| 荣成市| 灌云县| 阆中市| 精河县| 台州市| 山阴县| 顺昌县| 施甸县| 子长县| 阳新县| 九龙城区| 招远市| 北宁市| 津市市| 宝应县| 平泉县| 喜德县| 上饶县| 满洲里市| 伊宁市| 青铜峡市| 聂荣县| 中山市| 岳普湖县| 沅江市| 普洱| 高要市| 额济纳旗| 雅江县| 海宁市| 桂平市|