SpringBoot2.0与Undertow容器采坑笔录


1、前言

  • 此文章记录Spring Boot2.x以上版本的上传文件统一处理文件过大问题进行做笔录。
  • 此文章记录提出解决Spring Boot2x与undertow服务器上统一处理文件过大问题解决思路
  • 通过查找各种资料足以证明,SpringBoot2.x与Tomcat更为说服力,详细请认真看文章,希望文章对你有所获.

2、解决的思路

  • 【第1种】解决的思路

  • 配置springboot2.x文件上传,max-file-size,max-request-size参数

  • 把undertow服务器改成Tomcat,在一个类统一处理捕获上传文件控制文件最大限制,然后进行拦截抛异常编码和提示返回给前端。

  • 【第2种】解决的思路

  • 重写 undertow容器的io.undertow包的UndertowMessages_bundle改成UndertowMessages_bundle_zh_CN、然后在自个工程新建一个io.undertow然后进行修改 private static final String maxFileSizeExceeded = "UT000054: 上传的单个文件大小不能超过%sMB";

  UndertowMessages.png
  • 在Springboot的入口类加上支持国际化设置,经过本人测试超过设置最大请求值的时候spring.servlet.multipart.max-request-size,此时也无法返回自定义的codemsg

报错点:{"timestamp":"2019-06-04 16:09:53","status":500,"error":"Internal Server Error","message":"io.undertow.server.handlers.form.MultiPartParserDefinition$FileTooLargeException: UT000054: 上传的单个文件大小不能超过10MB","path":"/rest/importData"}

  • 支持编码国际化设置

>
    >org.springframework.boot>
    >spring-boot-starter-web>
    >
        
        >
            >spring-boot-starter-tomcat>
            >org.springframework.boot>
        >
    >
>

>
    >org.springframework.boot>
    >spring-boot-starter-undertow>
>

5、Springboot2.x文件上传配置参数

>
    >org.springframework.boot>
    >spring-boot-starter-web>
>

7、新建一个类统一处理拦截异常

  • 在一个类统一处理捕获上传文件控制文件最大限制,然后进行拦截抛异常编码和提示返回给前端。
/**
 * 全局异常处理器
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandlerResolver {
    /**
     * @Descript   统一处理文件过大问题.
     */
 @ExceptionHandler(MaxUploadSizeExceededException.class)
    public R handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {
        log.error("上传文件过大 ex={}", e);
        return retMsgCode("上传文件过大", 9999);
    }
}

8、SpringBoot2.x文档

  • SpringBoot2.x文档
  • 通过官方文档上面看也没看出Undertow与SpringBoot整合有很好的优势.反而找到它说不支持jsp Undertow does not support JSPs.
  • 从Undertow 1.4.0+开始,支持HTTP/2,而不需要在JDK8上附加任何要求 As of Undertow 1.4.0+, HTTP/2 is supported without any additional requirement on JDK8.
  • 可以启用多个文件监听Enable Multiple Listeners with Undertow

9、推荐了解的文章

  • 个人不建议看此文章写得有多好,数据测试数据。
  • Spring Boot 内嵌容器Undertow参数设置

10、Undertow官方

  • Undertow官方

Undertow是一个用java编写的灵活的高性能web服务器,提供基于NIO的阻塞和非阻塞API。
Undertow具有基于组合的体系结构,允许您通过组合小型的单一用途处理程序来构建web服务器。它使您可以灵活地选择是使用完整的Java EE servlet 4.0容器,还是使用低级的非阻塞处理程序,还是使用两者之间的任何东西。Undertow被设计为完全可嵌入的,易于使用fluent builder api。Undertow的生命周期完全由嵌入应用程序控制。Undertow由JBoss赞助,是Wildfly应用程序服务器中的默认web服务器。

10、个人感想与疑问

  • undertow服务器真的在市场大量使用了?
  • 使用undertow服务器能不能解决未预知的问题呢?
  • 当遇到问题能不能搜索资料来处理问题呢?
  • 当团队中遇到问题能不能快速定位排除问题进行处理掉呢?
  • 如果没有很好的案例实战过与经过市场的考验,请不要给网上这些所谓的测试数据给蒙蔽,一句话好奇会害死猫


     



作者:爱学习的蹭蹭
链接:https://www.jianshu.com/p/c171eed87f95
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。