核心内容摘要
黄品汇MBA智库黑科技
这是一个Spring Boot 配置类用于自定义UndertowWeb 服务器的配置主要目的是调整请求体包括文件上传的最大大小限制。
类结构说明
Configuration表明这是一个Spring 配置类会在应用启动时被加载。
用于定义和注册 Spring Bean。
UndertowConfig类自定义 Undertow 服务器配置的配置类。
通常用于替代默认的 Tomcat 配置如果项目使用的是 Undertow 作为内嵌服务器。
核心配置项
MAX_ENTITY_SIZE定义了一个常量10L * 1024 * 1024即10 MB。
这是Long 类型因为 Undertow 的相关选项使用 Long 类型。
该常量被用于两个地方普通请求体的最大大小文件上传请求体的最大大小
核心 BeanundertowCustomizer
返回值类型WebServerFactoryCustomizerUndertowServletWebServerFactory这是一个工厂定制器允许在 Spring Boot 启动时对 Undertow 服务器进行自定义配置。
定制逻辑使用 Lambda 表达式创建定制器。
通过factory.addBuilderCustomizers添加一个UndertowBuilderCustomizer。
两个关键配置项在builder中设置了两个 Undertow 选项
UndertowOptions.MAX_ENTITY_SIZE作用设置所有普通 HTTP 请求体的最大大小。
默认值通常是 2 MB。
本次设置调整为 10 MB。
UndertowOptions.MULTIPART_MAX_ENTITY_SIZE作用专门用于设置文件上传请求体的最大大小。
默认值通常是 2 MB。
本次设置调整为 10 MB。
为什么需要这个配置
默认限制较小Spring Boot 默认的请求体限制通常是2 MB。
如果上传文件或处理大请求体时超过该限制会抛出异常。
区分普通请求与文件上传MAX_ENTITY_SIZE控制普通 POST/PUT 请求体大小。
MULTIPART_MAX_ENTITY_SIZE控制multipart/form-data请求文件上传的大小。
统一调整为 10 MB这里将两者统一设置为 10 MB避免因请求体过大导致的错误。
使用场景当你使用Spring Boot Undertow作为服务器时。
需要上传大于 2 MB 的文件时。
需要处理较大的 JSON 或 XML 请求体时。
七、
注意事项仅适用于 Undertow如果使用 Tomcat 或 Jetty需要另一种配置方式。
可能会影响性能设置过大会增加内存占用需根据实际需求调整。
应与前端配置一致如果前端也有文件上传大小限制应保持一致。
可能还需要配置 Spring MVC 的上传限制如spring.servlet.multipart.max-file-size和max-request-size两者需配合使用。
示例扩展如果还需要设置其他 Undertow 参数可以在builder中继续添加builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE,MAX_ENTITY_SIZE).setServerOption(UndertowOptions.MULTIPART_MAX_ENTITY_SIZE,MAX_ENTITY_SIZE).setServerOption(UndertowOptions.MAX_PARAMETERS,
// 增加最大参数数量.setServerOption(UndertowOptions.MAX_HEADERS,
;// 增加最大请求头数量这是一个典型的Spring Boot 嵌入式服务器定制配置用于突破默认请求大小限制特别适用于需要处理大文件上传或大数据请求的应用场景。
Configuration public class UndertowConfig{// 配置你需要的最大请求大小10MB10*1024*1024 字节Long类型匹配UndertowOptions的Long常量 private static final long MAX_ENTITY_SIZE10L *1024*1024;Bean public WebServerFactoryCustomizerUndertowServletWebServerFactoryundertowCustomizer(){return(UndertowServletWebServerFactory factory)-{factory.addBuilderCustomizers((builder)-{// 核心1设置所有普通请求体最大大小对应你看到的MAX_ENTITY_SIZE默认2MB builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE, MAX_ENTITY_SIZE)// 核心2设置文件上传请求体最大大小对应你看到的MULTIPART_MAX_ENTITY_SIZE默认2MB .setServerOption(UndertowOptions.MULTIPART_MAX_ENTITY_SIZE, MAX_ENTITY_SIZE);});};}}