springboot中使用undertow踩坑記(最新推薦)
場(chǎng)景:準(zhǔn)備基于springboot的靜態(tài)資源實(shí)現(xiàn)mp4資源的播放,不同版本的springboot下效果不一樣,可能導(dǎo)致正常的資源不可用。本文測(cè)試了幾個(gè)版本,也針對(duì)這種情況提出了解決建議,希望對(duì)你的工作有所幫助。
眾所周知,springboot內(nè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>第二步、配置申明
# 開發(fā)環(huán)境配置
server:
# 服務(wù)器的HTTP端口,默認(rèn)為8080
port: 8080
servlet:
# 應(yīng)用的訪問路徑
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)類似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í)行類似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ì)外開放的靜態(tài)資源,正常情況下,將資源拷貝到相應(yīng)的目錄下,就可以訪問相應(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的容器的有多少?歡迎大家反饋。
到此這篇關(guān)于springboot中使用undertow踩坑記的文章就介紹到這了,更多相關(guān)springboot使用undertow內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用Spring AOP的通知類型及創(chuàng)建通知
這篇文章主要給大家介紹了關(guān)于如何使用Spring AOP的通知類型及創(chuàng)建通知的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring AOP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Springboot GET和POST請(qǐng)求參數(shù)獲取方式小結(jié)
Spring Boot GET和POST請(qǐng)求參數(shù)獲取是開發(fā)人員經(jīng)常需要解決的問題,本文主要介紹了Springboot GET和POST請(qǐng)求參數(shù)獲取方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
如何利用JConsole觀察分析Java程序的運(yùn)行并進(jìn)行排錯(cuò)調(diào)優(yōu)
從Java 5開始 引入了 JConsole。JConsole 是一個(gè)內(nèi)置 Java 性能分析器,可以從命令行或在 GUI shell 中運(yùn)行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來(lái)監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼2015-12-12
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(31)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧,希望可以幫到你2021-07-07
Springboot結(jié)合rabbitmq實(shí)現(xiàn)的死信隊(duì)列
為了保證訂單業(yè)務(wù)的消息數(shù)據(jù)不丟失,需要使用到RabbitMQ的死信隊(duì)列機(jī)制,本文主要介紹了Springboot結(jié)合rabbitmq實(shí)現(xiàn)的死信隊(duì)列,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
淺談Spring Data如何簡(jiǎn)化數(shù)據(jù)操作的方法
這篇文章主要介紹了看Spring Data如何簡(jiǎn)化數(shù)據(jù)操作的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-04-04
idea 創(chuàng)建properties配置文件的步驟
這篇文章主要介紹了idea 創(chuàng)建properties配置文件的步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-01-01

