大家好,我是R哥。
Spring Boot 4.0.0-RC1 最近发布了,虽然还没有发布正式版,但从最新的《Spring Boot 4.0 迁移指南》中发现,Spring Boot 4.0 已经移除了对 Undertow 嵌入式 Servlet 容器的支持。

Spring Boot 4.0+ 之后,嵌入式 Servlet 容器只支持 Tomcat 和 Jetty 了。
Undertow 扫盲:
Undertow 是一个基于非阻塞 IO、专门为高性能设计的轻量级 Java Web 服务器,一直是小而美的存在,它是 Tomcat、Jetty 三者中最轻量的一个。
Undertow 体积更小,启动更快,在许多基准测试中,QPS 明显优于 Tomcat 和 Jetty。
为什么 Spring Boot 4.0 要移除 Undertow?
因为 Spring Boot 4.0+ 已经升级到了 Servlet 6.1+ 规范,但 Undertow 却不支持 Servlet 6.1+,所以 Spring Boot 只能忍痛割爱,移除了对 Undertow 的支持。

Spring Boot 4.0 放弃 Undertow 的直接原因是:Undertow 不支持 Servlet 6.1+。
另外,可能还有以下原因:
1、Undertow 社区相对较小,文档、学习资料等方面都不如 Tomcat、Jetty 丰富,对于传统 Servlet 模型的支持也那么完善。
2、Undertow 由 Red Hat / JBoss 开源,后来并入 WildFly 服务器并作为其默认 Web 容器。Red Hat 的重心一直是企业级项目,对免费开源的并不上心,CentOS 7.x 的停服就是前车之鉴,Undertow 这波也是直接摆烂了。
3、Undertow 一直以来都不是一个主流的 Web 服务器/容器,使用率极低,在国内更没有什么存在感。所以,Spring Boot 移除对 Undertow 的支持影响也不大。
所以,强烈建议 Spring Boot 4.0 不要用 Undertow 了,也不要把 Spring Boot 4.0 的应用部署到不兼容 Servlet 6.1 的容器里。
以后,Spring Boot 嵌入式 Servlet 容器的的圈子里只有 Tomcat + Jetty 了,Jetty 是当前 Undertow 被踢出局后,唯一还活着的非 Tomcat 选手,轻量、快、配置灵活,对于极简 Web 项目依然是个不错选择。
默认为 Tomcat,如果你要切换为 Jetty,可以使用以下配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 排除默认的 Tomcat 容器依赖 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<!-- 使用 Jetty -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Spring Boot 基础就不介绍了,推荐看这个实战项目:
https://github.com/javastacks/spring-boot-best-practice
好了,今天的分享就到这里了,后面R哥会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送。
版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。