大家好,我是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 基础就不介绍了,推荐看这个实战项目:
最后打个小广告:
如果你还没用过 Spring Boot,这里推荐下我的《Spring Boot 核心技术课》,已更新至 Spring Boot 3.5,17 个模块,几乎涉及所有核心技术,包括底层实现原理及代码实战,知识点非常齐全,助你快速打通 Spring Boot 的各个环节。
有需要的直接扫码订阅:

等课程内容更新到 Spring Boot 4.x,本课程可能会涨价到 499 元,早订阅,早学习,早受益。
好了,今天的分享就到这里了,后面R哥会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。



