亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

記一次springboot中用undertow的坑

 更新時(shí)間:2022年03月21日 14:27:56   作者:yelangking1  
這篇文章主要介紹了記一次springboot中用undertow的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot中用undertow的坑

場(chǎng)景:準(zhǔn)備基于springboot的靜態(tài)資源實(shí)現(xiàn)mp4資源的播放,不同版本的springboot下效果不一樣,可能導(dǎo)致正常的資源不可用。本文測(cè)試了幾個(gè)版本,也針對(duì)這種情況提出了解決建議,希望對(duì)你的工作有所幫助。

眾所周知,springboot內(nèi)置類(lèi)web中間件,將web服務(wù)器管理權(quán)交給了容器。在使用時(shí)只需要進(jìn)行申明即可。

本文實(shí)驗(yàn)的環(huán)境如下

windows7+JDK1.8+Eclipse+Maven3.3.9+SpringBoot2.2.x+Undertow2.2.x

環(huán)境準(zhǔn)備

第一步、配置maven環(huán)境

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yelang</groupId>
  <artifactId>undertowdemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Undertow測(cè)試</name>
  <description>Undertow中間件測(cè)試</description>
  
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
        <relativePath />
    </parent>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <!-- 移除掉默認(rèn)支持的 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>
  </dependencies>
</project>

第二步、配置申明

# 開(kāi)發(fā)環(huán)境配置
server:
  # 服務(wù)器的HTTP端口,默認(rèn)為8080
  port: 8080
  servlet:
    # 應(yīng)用的訪問(wèn)路徑
    context-path: /
  # undertow 配置
  undertow:
    # HTTP post內(nèi)容的最大大小。當(dāng)值為-1時(shí),默認(rèn)值為大小是無(wú)限的
    max-http-post-size: -1
    # 以下的配置會(huì)影響buffer,這些buffer會(huì)用于服務(wù)器連接的IO操作,有點(diǎn)類(lèi)似netty的池化內(nèi)存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分
    buffer-size: 512
    # 是否分配的直接內(nèi)存
    direct-buffers: true
    threads:
      # 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會(huì)負(fù)責(zé)多個(gè)連接, 默認(rèn)設(shè)置每個(gè)CPU核心一個(gè)線程
      io: 8
      # 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類(lèi)似servlet請(qǐng)求阻塞操作, undertow會(huì)從這個(gè)線程池中取得線程,它的值設(shè)置取決于系統(tǒng)的負(fù)載
      worker: 256
#  # tomcat 配置
#  tomcat:
#    # tomcat的URI編碼
#    uri-encoding: UTF-8
#    # tomcat最大線程數(shù),默認(rèn)為200
#    max-threads: 500
#    # Tomcat啟動(dòng)初始化的線程數(shù),默認(rèn)值25
#    min-spare-threads: 30

第三步、靜態(tài)資源映射

package com.yelang.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
/**
 * 通用配置
 * @author wzh
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer {
 
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    /** 本地文件上傳路徑 */
    registry.addResourceHandler("/profile/**").addResourceLocations("file:D:/wzh/uploadPath/");
    /** swagger配置 */
    registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  }
}

以上代碼標(biāo)注了系統(tǒng)對(duì)外開(kāi)放的靜態(tài)資源,正常情況下,將資源拷貝到相應(yīng)的目錄下,就可以訪問(wèn)相應(yīng)資源。

http://localhost:8080/profile/2.mp4

使用springboot2.2.11、springboot2.2.12、springboot2.2.13

這三個(gè)版本正常mp4也會(huì)無(wú)法加載。估計(jì)是這幾個(gè)版本存在一些設(shè)置。

如果是生產(chǎn)采用了上述幾個(gè)版本的sringboot

如果需要對(duì)mp4等資源進(jìn)行預(yù)覽查看的話。

建議如下:第一、調(diào)整springboot的版本,調(diào)整到支持的版本。第二、不再使用profile的方式提供視頻資源,采用nginx等組件。第三、采用第三方文件系統(tǒng)。第四種、將undertow容器替換成tomcat等其他容器也可以。

小調(diào)查:在你的生產(chǎn)環(huán)境中,是使用內(nèi)置容器嗎?使用undertow這種nio的容器的有多少?

springboot需放棄Tomcat,選擇Undertow嗎?

在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認(rèn)的容器技術(shù),而且是內(nèi)嵌式的Tomcat。

同時(shí),SpringBoot也支持Undertow容器,我們可以很方便的用Undertow替換Tomcat,而Undertow的性能和內(nèi)存使用方面都優(yōu)于Tomcat,那我們?nèi)绾问褂肬ndertow技術(shù)呢?本文將為大家細(xì)細(xì)講解。

SpringBoot中的Tomcat容器

SpringBoot可以說(shuō)是目前最火的Java Web框架了。它將開(kāi)發(fā)者從繁重的xml解救了出來(lái),讓開(kāi)發(fā)者在幾分鐘內(nèi)就可以創(chuàng)建一個(gè)完整的Web服務(wù),極大的提高了開(kāi)發(fā)者的工作效率。Web容器技術(shù)是Web項(xiàng)目必不可少的組成部分,因?yàn)槿蜽eb項(xiàng)目都要借助容器技術(shù)來(lái)運(yùn)行起來(lái)。

在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認(rèn)的容器技術(shù),而且是內(nèi)嵌式的Tomcat。

SpringBoot設(shè)置Undertow

對(duì)于Tomcat技術(shù),Java程序員應(yīng)該都非常熟悉,它是Web應(yīng)用最常用的容器技術(shù)。我們最早的開(kāi)發(fā)的項(xiàng)目基本都是部署在Tomcat下運(yùn)行,那除了Tomcat容器,SpringBoot中我們還可以使用什么容器技術(shù)呢?沒(méi)錯(cuò),就是題目中的Undertow容器技術(shù)。SrpingBoot已經(jīng)完全繼承了Undertow技術(shù),我們只需要引入U(xiǎn)ndertow的依賴即可,如下圖所示。

配置好以后,我們啟動(dòng)應(yīng)用程序,發(fā)現(xiàn)容器已經(jīng)替換為Undertow。

那我們?yōu)槭裁葱枰鎿QTomcat為Undertow技術(shù)呢?

Tomcat與Undertow的優(yōu)劣對(duì)比

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

但是,Tomcat和ApacheHTTP服務(wù)器不是一個(gè)東西,ApacheHTTP服務(wù)器是用C語(yǔ)言實(shí)現(xiàn)的HTTP Web服務(wù)器。Tomcat是完全免費(fèi)的,深受開(kāi)發(fā)者的喜愛(ài)。

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

我們?cè)谙嗤瑱C(jī)器配置下壓測(cè)Tomcat和Undertow,得到的測(cè)試結(jié)果如下所示:

QPS測(cè)試結(jié)果對(duì)比:

Tomcat

Undertow

內(nèi)存使用對(duì)比:

Tomcat

Undertow

通過(guò)測(cè)試發(fā)現(xiàn),在高并發(fā)系統(tǒng)中,Tomcat相對(duì)來(lái)說(shuō)比較弱。在相同的機(jī)器配置下,模擬相等的請(qǐng)求數(shù),Undertow在性能和內(nèi)存使用方面都是最優(yōu)的。并且Undertow新版本默認(rèn)使用持久連接,這將會(huì)進(jìn)一步提高它的并發(fā)吞吐能力。所以,如果是高并發(fā)的業(yè)務(wù)系統(tǒng),Undertow是最佳選擇。

最后

SpingBoot中我們既可以使用Tomcat作為Http服務(wù),也可以用Undertow來(lái)代替。Undertow在高并發(fā)業(yè)務(wù)場(chǎng)景中,性能優(yōu)于Tomcat。所以,如果我們的系統(tǒng)是高并發(fā)請(qǐng)求,不妨使用一下Undertow,你會(huì)發(fā)現(xiàn)你的系統(tǒng)性能會(huì)得到很大的提升。

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

相關(guān)文章

  • 詳解Java常用工具類(lèi)—泛型

    詳解Java常用工具類(lèi)—泛型

    這篇文章主要介紹了Java常用工具類(lèi)—泛型,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)

    使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)

    這篇文章介紹了使用ShardingSphere-Proxy實(shí)現(xiàn)分表分庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • java模擬微信搶紅包的實(shí)例代碼

    java模擬微信搶紅包的實(shí)例代碼

    現(xiàn)在搶紅包的功能很受歡迎,本篇文章主要介紹了java模擬微信搶紅包的實(shí)例代碼。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 深入理解ThreadLocal工作原理及使用示例

    深入理解ThreadLocal工作原理及使用示例

    這篇文章主要介紹了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal<T> 簡(jiǎn)介和使用示例及ThreadLocal<T>的原理等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法

    MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法

    本文主要介紹了MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Cookie 實(shí)現(xiàn)的原理

    Cookie 實(shí)現(xiàn)的原理

    我們?cè)跒g覽器中,經(jīng)常涉及到數(shù)據(jù)的交換,比如你登錄郵箱,登錄一個(gè)頁(yè)面。我們經(jīng)常會(huì)在此時(shí)設(shè)置30天內(nèi)記住我,或者自動(dòng)登錄選項(xiàng)。那么它們是怎么記錄信息的呢,答案就是今天的主角cookie了
    2021-06-06
  • java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    這篇文章主要介紹了 java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • JAVA?module-info.java文件詳解

    JAVA?module-info.java文件詳解

    這篇文章主要介紹了JAVA?module-info.java文件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn)

    java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn)

    這篇文章主要介紹了java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01

最新評(píng)論