中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot中用undertow的坑怎么解決

發布時間:2022-03-21 15:39:26 來源:億速云 閱讀:2026 作者:iii 欄目:開發技術

這篇“springboot中用undertow的坑怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“springboot中用undertow的坑怎么解決”文章吧。

springboot中用undertow的坑

場景:準備基于springboot的靜態資源實現mp4資源的播放,不同版本的springboot下效果不一樣,可能導致正常的資源不可用。本文測試了幾個版本,也針對這種情況提出了解決建議,希望對你的工作有所幫助。

眾所周知,springboot內置類web中間件,將web服務器管理權交給了容器。在使用時只需要進行申明即可。

本文實驗的環境如下

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

環境準備

第一步、配置maven環境

<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測試</name>
  <description>Undertow中間件測試</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>
      <!-- 移除掉默認支持的 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>

第二步、配置申明

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

第三步、靜態資源映射

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/");
  }
}

以上代碼標注了系統對外開放的靜態資源,正常情況下,將資源拷貝到相應的目錄下,就可以訪問相應資源。

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

springboot中用undertow的坑怎么解決

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

這三個版本正常mp4也會無法加載。估計是這幾個版本存在一些設置。

如果是生產采用了上述幾個版本的sringboot

如果需要對mp4等資源進行預覽查看的話。

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

小調查:在你的生產環境中,是使用內置容器嗎?使用undertow這種nio的容器的有多少?

springboot需放棄Tomcat,選擇Undertow嗎?

在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中我們還可以使用什么容器技術呢?沒錯,就是題目中的Undertow容器技術。SrpingBoot已經完全繼承了Undertow技術,我們只需要引入Undertow的依賴即可,如下圖所示。

springboot中用undertow的坑怎么解決

springboot中用undertow的坑怎么解決

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

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

Tomcat與Undertow的優劣對比

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

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

springboot中用undertow的坑怎么解決

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

springboot中用undertow的坑怎么解決

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

QPS測試結果對比:

Tomcat

springboot中用undertow的坑怎么解決

Undertow

springboot中用undertow的坑怎么解決

內存使用對比:

Tomcat

springboot中用undertow的坑怎么解決

Undertow

springboot中用undertow的坑怎么解決

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

以上就是關于“springboot中用undertow的坑怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达孜县| 常熟市| 宜章县| 连山| 彰化市| 永康市| 洛宁县| 铜鼓县| 两当县| 南江县| 吉林市| 山阳县| 洪湖市| 新和县| 新化县| 墨玉县| 长兴县| 宜宾县| 汪清县| 衡山县| 称多县| 板桥市| 晋城| 邹平县| 民勤县| 鞍山市| 威海市| 涟源市| 辉县市| 武穴市| 绥宁县| 余江县| 湖南省| 兰溪市| 垣曲县| 且末县| 彭州市| 阜南县| 丰原市| 新安县| 宁陕县|