undertow 怎么創建線程_為什么很多SpringBoot開發者放棄了Tomcat,選擇了Undertow

點擊上方“后端技術精選”,選擇“置頂公眾號”

技術文章第一時間送達!

作者:阿邁達

toutiao.com/a6775476659416990212/

前言

在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認的容器技術,而且是內嵌式的Tomcat。

同時,SpringBoot也支持Undertow容器,我們可以很方便的用Undertow替換Tomcat,而Undertow的性能和內存使用方面都優于Tomcat,那我們如何使用Undertow技術呢?本文將為大家細細講解。

SpringBoot中的Tomcat容器

SpringBoot可以說是目前最火的Java Web框架了。它將開發者從繁重的xml解救了出來,讓開發者在幾分鐘內就可以創建一個完整的Web服務,極大的提高了開發者的工作效率。Web容器技術是Web項目必不可少的組成部分,因為任Web項目都要借助容器技術來運行起來。

在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認的容器技術,而且是內嵌式的Tomcat。

SpringBoot設置Undertow

對于Tomcat技術,Java程序員應該都非常熟悉,它是Web應用最常用的容器技術。我們最早的開發的項目基本都是部署在Tomcat下運行,那除了Tomcat容器,SpringBoot中我們還可以使用什么容器技術呢?SpringBoot內容聚合

沒錯,就是題目中的Undertow容器技術。SrpingBoot已經完全繼承了Undertow技術,我們只需要引入Undertow的依賴即可,如下圖所示。

08c44c550fe8b0e7f2d47feeee6f36bc.png

44e1c8f4b4b839cfc50bc3d537ba10cb.png

配置好以后,我們啟動應用程序,發現容器已經替換為Undertow。

那我們為什么需要替換Tomcat為Undertow技術呢?

Tomcat與Undertow的優劣對比

Tomcat是Apache基金下的一個輕量級的Servlet容器,支持Servlet和JSP。Tomcat具有Web服務器特有的功能,包括 Tomcat管理和控制平臺、安全局管理和Tomcat閥等。Tomcat本身包含了HTTP服務器,因此也可以視作單獨的Web服務器。

但是,Tomcat和ApacheHTTP服務器不是一個東西,ApacheHTTP服務器是用C語言實現的HTTP Web服務器。Tomcat是完全免費的,深受開發者的喜愛。

ce8c162c821be9bca500dfe34a3ef178.png

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

8e7f5e241a6c64f2202ec6c6c3b7fbb1.png

我們在相同機器配置下壓測Tomcat和Undertow,得到的測試結果如下所示:

QPS測試結果對比:

Tomcat

7f056014d65054ef713796e4661e13fc.png

Undertow

716563f44a5798d96a0d9ca0c7a92e54.png

內存使用對比:

Tomcat

f0dbb10465039b18706c7c68f592b28c.png

Undertow

a055fd4e26f8179f5e0763f6a6608b47.png

通過測試發現,在高并發系統中,Tomcat相對來說比較弱。在相同的機器配置下,模擬相等的請求數,Undertow在性能和內存使用方面都是最優的。并且Undertow新版本默認使用持久連接,這將會進一步提高它的并發吞吐能力。所以,如果是高并發的業務系統,Undertow是最佳選擇。

最后

SpingBoot中我們既可以使用Tomcat作為Http服務,也可以用Undertow來代替。Undertow在高并發業務場景中,性能優于Tomcat。所以,如果我們的系統是高并發請求,不妨使用一下Undertow,你會發現你的系統性能會得到很大的提升。

END

Java面試題專欄

【40期】說一下線程池內部工作原理【39期】Mybatis面試18問,你想知道的都在這里了!【38期】一份tcp、http面試指南,常考點都給你了【37期】請你詳細說說類加載流程,類加載機制及自定義類加載器【36期】說說 如何停止一個正在運行的線程?【35期】談談你對Java線程之間通信方式的理解【34期】談談為什么要拆分數據庫?有哪些方法?【33期】分別談談聯合索引生效和失效的條件【32期】你知道Redis的字符串是怎么實現的嗎?【31期】了解什么是 redis 的雪崩、穿透和擊穿?redis 崩潰之后會怎么樣?應對措施是什么

cb0ef374c5107a2f76ced17abde9833f.png

歡迎長按下圖關注公眾號后端技術精選

6d4300ab9640bc1cee5b1727c835db8d.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457366.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一起玩轉CoordinatorLayout

作為Material Design風格的重要組件,CoordinatorLayout協調多種組件的聯動,實現各種復雜的效果,在實際項目中扮演著越來越重要的角色。本篇博客將由淺到深,帶你一起玩轉CoordinatorLayout。 官方文檔對CoordinatorLayout是這樣描述的&#xf…

離散數學圖論旅行規劃問題_2020年MathorCup高校數學建模挑戰賽——C 題 倉內揀貨優化問題...

下面的鏈接是精華版思路,亮點是對第六問的探討。高度概括一下:第一問曼哈頓,第二問用免疫,三問增加任務單,四問增加揀貨員,五問改變復核臺,六問亮點來探討~ 有點皮MathorCup C題 倉內揀貨優化問…

Asp.NetWebForm的控件屬性

一:GridView: 1.綁定ID 的值:DataKeyNames"Id", 2.自動產生列的意思:AutoGenerateColumns 3.如何注冊腳本:ClientScript.RegisterStartupScript(this.GetType(),"text","alert(刪除成功)"&#xf…

【VBA編程】10.自定義集合

自定義集合類型,類似于變量聲明,只是要將Dim關鍵字和New collection關鍵字搭配起來使用,其語法描述如下:其中集合名的命名方式同于標準變量的命名 Dim 集合名 As New collection 對于已經定義的集合對象,可以使用集合的…

git fork clone 區別_Working with Git | Git 與 GitHub

關于各位好,這里是 Chinas Prices Project 項目的知乎專欄。關于 CPP 項目,您可以在這篇文章里了解到更多的信息。若您對這個項目感興趣,我們非常歡迎您與我們交流您的想法與見解。在一個團隊的成員同時為一個項目進行開發工作時,…

舒適的路線(codevs 1001)

題目描述 DescriptionZ小鎮是一個景色宜人的地方&#xff0c;吸引來自各地的觀光客來此旅游觀光。Z小鎮附近共有N(1<N≤500)個景點&#xff08;編號為1,2,3,…,N&#xff09;&#xff0c;這些景點被M&#xff08;0<M≤5000&#xff09;條道路連接著&#xff0c;所有道路都…

PHP_Smarty

模板 數據與表現層的標簽分離 smarty是PHP 與 HTML代碼的分離 小型模板類 $smarty 的工作流程&#xff1a; 把需要顯示的全局變量&#xff0c;賦值塞到對象內部的屬性上&#xff0c;一個數組中.編譯模板&#xff0c;把{$標簽},解析成相應的<?php echo 代碼引入編譯后的PHP文…

讀中文_挑戰來了!康輝喊你讀中文十級繞口令!

文章來源&#xff1a;央視頻漢語橋木甬讀桶不讀涌&#xff0c;月農讀膿不讀朧。米更讀粳不讀梗&#xff0c;日青讀晴不讀睛。米宗讀粽不讀綜&#xff0c;言丁讀訂不讀釘。土竟讀境不是鏡&#xff0c;土平讀坪不是評。耳令讀聆不讀嶺&#xff0c;火登讀燈不讀澄。言甬讀誦不讀蛹…

ios 自定義鍵盤

由于項目需要&#xff0c;需要自定義鍵盤。ios系統鍵盤會緩存鍵盤輸入&#xff0c;并保存在系統目錄下的文件里&#xff0c;并且是明文存儲&#xff0c;存在帳號密碼泄漏風險。在別人代碼基礎上修改了下&#xff0c;美化了下界面&#xff0c;去掉了字符輸入&#xff0c;加了點擊…

對象入參指定泛型類型_為什么要使用泛型,而不是直接將類型作為參數傳遞?

其實很多類型系統都是用類型參數的的形式來實現Universal Type的&#xff0c;Parametric Polymorphism 和System F可以了解一下&#xff0c;如果只局限于一兩個熱門語言的話&#xff0c;可能會有此疑問&#xff0c;但是從type theory的角度來說&#xff0c;高階類型本身就是typ…

【GOF23設計模式】迭代器模式

【GOF23設計模式】迭代器模式 來源&#xff1a;http://www.bjsxt.com/ 一、【GOF23設計模式】_迭代器模式、JDK內置迭代器、內部類迭代器 1 package com.test.iterator;2 /**3 * 自定義的迭代器接口4 */5 public interface MyIterator {6 void first(); //將游標指向第…

SQLServer 維護腳本分享(08)臨時數據庫(tempdb)

dbcc sqlperf(logspace) --各數據庫日志大小及使用百分比dbcc loginfo --查看當前數據庫的虛擬日志文件--臨時表Tempdb最近使用情況 SELECT t1.session_id ,t1.internal_objects_alloc_page_count*8.0/1024 as internal_objects_alloc_MB ,t1.internal_objects_dealloc_p…

51單片機50個實例代碼_【附代碼】51單片機電子密碼鎖教程

簡介大家好&#xff0c;這篇文章的內容是關于如何用51單片機來制作一個電子密碼鎖的教程&#xff0c;通過這篇教程可以讓剛入門的朋友了解矩陣鍵盤、LCD1602的使用方法&#xff0c;以及密碼輸入和修改的程序介紹&#xff0c;我會對每個部分進行詳細的介紹。首先我們來看一下這個…

旋轉的正方體

<!DOCTYPE html><html lang"zh-cmn-Hans"><head><meta charset"utf-8" /><title>backface-visibility_CSS參考手冊_web前端開發參考手冊系列</title><meta name"author" content"Joy Du(飄零霧雨),…

8數據提供什么掩膜產品_博碩能為你提供什么產品?

自動噴漆設備應用于線條、木門、櫥柜、樓梯、套房家具、辦公家具、木飾面板、外墻保溫裝飾一體板板等產品領域&#xff0c;針對NC、PU、UV、水性漆和氟碳漆等不同種類的油漆&#xff0c;進行自動化噴涂和干燥作業。自動噴漆設備有多種規格型號&#xff0c;分為不同的噴涂方式。…

python3 實現對比conf 文件差異

用法&#xff1a; ./conf.py nginx1.conf nginx2.conf > diff.htmlconf.py#!/usr/bin/python import difflib import sys #### Usage: compare_nginx.conf.py filename1 filename2 >diff.html try:textfile1 sys.argv[1]textfile2 sys.argv[2] except Exception as…

mysql----innodb統計信息

對innodb 統計信息的控制可以通過如下幾個常用的variables 來實現 1、innodb_stats_persistent&#xff1a; 這個參數控制著innodb的統計信息是否持久化到磁盤&#xff0c;先說明一下持久化到磁盤是什么意思&#xff1b;通常來說統計信息只保存在內存中&#xff0c;也就是說如果…

linux pid t 頭文件_linux系統調用相關頭文件

Linux C 一些函數 所屬的頭文件 2011-03-07 10:25:07分類&#xff1a; LINUX在編寫程序時&#xff0c;有時總是不記得所使用的函數在哪個庫函數中。現在先把自己以前經常用到的函數頭文件總結一下。 有不對的地方還請指教。1&#xff0c;系統調用 文件的操作函數#inlclude &…

jsp頁面驗證碼(完整實例)

項目結構如下&#xff0c;MyEclipse中新建一個Web Project&#xff0c;取名servlet 1、src下new一個servlet類 package com.servlet;import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOExcept…

開源oa_圈子哥推薦一款基于 Spring Boot 開發 OA 開源產品,學習/搞外快都是不二選擇!...

點擊上方藍字關注「程序員的技術圈子」今天圈子哥給大家推薦一套Spring Boot 開發 OA系統&#xff0c;系統功能齊全&#xff0c;不管是用來學習或者搞外快都是不錯的選擇&#xff0c;clone下來吧&#xff01;辦公自動化(OA)是面向組織的日常運作和管理&#xff0c;員工及管理者…