Java基础、中级、高级、架构面试资料

Spring Boot 4.1.1 重磅发布,一次性修复 30+ bug

JAVA herman 8浏览
公告:“业余草”微信公众号 AI 中转站提供免费体验,点击链接 https://unity2.ai/register?ref=3XTnndN2 进行访问,支持 Claude、ChatGPT、Gemini 等最新模型!关注业余草微信公众号,添加作者微信:xttblog2!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

有段时间没有给大家同步 Spring 生态方面的动态了,我看群里有小伙伴催我说 Spring Boot 做了更新。我到官网一看,果真如此,但是这个版本的更新,修的 bug 也太多了吧。

一次小版本发布竟然修了 30+ bug,感觉比我写的屎山代码都潦草呢。Spring Boot 现在的迭代不算快,距离 4.1.0 两个月的时间,小版本更新就是查漏补缺,小修小补。接下来我们一起来看看 Spring Boot 的这次 bug 修复之旅吧。

gRPC Gradle 插件行为调整

这是这个小版本发布中唯一需要开发者主动适配的变更。

在 4.1.0 中,Spring Boot 的 Gradle 插件会在检测到 com.google.protobuf 插件时,自动配置 gRPC 代码生成。这虽然方便了 gRPC 用户,却给仅使用 Protobuf 序列化、不需要 gRPC 的项目带来了麻烦。它会自动引入 gRPC 相关依赖和代码生成配置。

但是,从 4.1.1 开始,Gradle 插件不再自动配置 gRPC了。此时,如果你确实需要 gRPC 支持,则必须显式的声明。

protobuf {
    plugins {
        grpc {}  // 空块即可触发自动配置
    }
}

因此,如果升级 4.1.1 后,项目中用了 Protobuf 但没用 gRPC,升级后会更干净;如果用了 gRPC,记得补上上面的空块配置,否则代码生成会中断。

这里我想起了 AI 领域的一句话,不想学就不用学了,因为不到 6 个月就过期了。Spring Boot 也一样,不用尝鲜踩坑,等后面版本稳定一些后再落地到项目中。

30+ Bug 修复

4.1.1 版本修复了多达 30+ 个 Bug,下面列举几个对生产环境影响较大的吧。

文章配图参见公众号:https://mp.weixin.qq.com/s/v-u7Q7MSdLGxi_3Ih4phLQ

日志编码失败污染后续日志

这个问题的表现是,当 JSON 结构化日志编码失败时,失败状态会“传染”给同一线程的下一个日志事件,导致后续日志格式错乱。

前提是使用了 logging.structured.format.console=json 配置的应用,在极端情况下会出现日志丢失或格式异常。

官方的修复方案是直接隔离了编码失败的状态,确保单条日志的失败不会影响后续事件。

Kafka 消费者安全协议配置失效

4.1.0 版本在使用 spring.kafka.consumer.security.protocol 等消费者级别的安全协议配置被忽略,实际使用的是全局配置。尤其是在多集群场景下,消费者无法独立配置 SASL/SSL 等安全协议。

修复方法就是将消费者特定配置现在被正确读取和应用。

虚拟线程与 Redis 不兼容

上篇文章我还在写“虚拟线程凉了”,其实是它面前有几堵墙。比如,生态以及数据库支持和 bug 问题等。

而 4.1.0 版本中,当 spring.threads.virtual.enabled=true 时,RedisMessageListenerContainer 仍然使用平台线程,没有享受到虚拟线程的轻量优势。

输入开了也白开,高并发 Redis 消息监听场景下,线程资源无法有效利用。

官方这次在新版本中加入了自动检测虚拟线程开关,正确配置监听容器。

MongoDB 健康检查导致连接数飙升

MongoDB 健康指示器每次检查都会创建新连接,在健康检查频繁时导致连接数暴涨。

尤其是在大规模部署的情况下更可能快速触达 MongoDB 连接上限。新版本中,官方直接复用已有连接进行健康检查。

@Validated + 通配符 Map 崩溃

该 bug 的表现是对包含 Map<String, ? extends SomeType>@Validated 配置类进行属性绑定时,抛出 IllegalStateException。这也导致了一些复杂配置类的校验场景直接启动失败。

新版本,社区里直接正确处理通配符类型的属性绑定。

Cookie 的部分属性无法关闭

在使用 Cookie 的 Partitioned 属性时,即使显式设置 server.servlet.session.cookie.partitioned=false,响应中仍然会携带 Partitioned 属性。

这会导致 CHIPS (Cookies Having Independent Partitioned State) 相关测试和兼容性场景受阻。

老外发现问题后,社区里已经把 false 值被正确的使用了。

还有很多小 bug,就不一一展开了。下面是常规升级带来的一些依赖组件的升级。

核心依赖升级一览

4.1.1 同步升级了整个 Spring 生态的核心组件,确保各模块版本对齐。

依赖升级至版本
Spring Framework7.0.9
Spring Security7.1.1
Spring Data2026.0.1
Spring Kafka4.1.1
Spring gRPC1.1.1
Hibernate7.4.5.Final
Jackson3.1.5 / 2.21.5
Netty4.2.17.Final
Tomcat11.0.24
Micrometer1.17.1
Reactor2025.0.7

上面这些升级不仅带来了功能改进,更重要的是包含了各上游项目的安全修复。例如 Netty 4.2.17 和 Tomcat 11.0.24 都修复了近期披露的安全漏洞。

最后

Spring Boot 4.1.x 现在的使用率还不高,其中还是老外占据多数。而 4.1.x 只是一个小而精的补丁版本而已。它没有 flashy 的新功能,但社区用 30+ 个 Bug 修复和全面的依赖升级,证明了 Spring 团队对稳定性的持续投入。

现在整个 Java 生态的重心已经转移到 Agent 上了,Spring Boot 的升级与追捧已落后 AI 好几个数量级了。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Spring Boot 4.1.1 重磅发布,一次性修复 30+ bug