大家好,我是R哥。

距离《Spring Boot 4.0 》的正式发布已经过去半年多了,Spring Boot 4 的第一个功能增强版本终于来了。

Spring Boot 4.1.0 正式发布了:

最新的支持版本如下:

从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年。

Spring Boot 3.4.x 及以下开源版本全部停止维护了,Spring Boot 3.5.x 马上也要停止维护了,开源支持的版本马上要进入 4.0+ 版本的时代了,商业支持的 3.x 最高版本版本 3.3.x、2.x 为 2.7.x

Spring Boot 3.0+ 很快要成为过去式了,Spring Boot 马上要进入了全新的 4.0+ 时代了,2.6.x 以下的版本彻底退出历史舞台,技术变革太快了,赶紧学起来。。

Spring Boot 4.1.0 更新要点

Spring Boot 4.1 虽然不是一次像 4.0 那样的大换血,但增加了好几个实用的新功能,一起来看看。

1、Spring gRPC 官方支持

gRPC 是 Google 开源的一个高性能的 RPC 框架,利用二进制消息实现客户端与服务器之间的通信。Spring Boot 提供对开发和测试客户端及服务器端 gRPC 应用的支持。

gRPC 使用的底层消息格式是 Protocol Buffers,它允许使用多种编程语言来创建和使用消息。

Spring Boot 4.1 最大的新增能力,就是把 gRPC 正式纳入官方生态。

以前做 gRPC,需要依赖社区 Starter 或独立的 Spring gRPC 项目,而现在,Spring 官方终于补上了这一块拼图。

现在 Spring Boot 4.1 提供了完整支持,包括:

  • 支持 gRPC Server;
  • 支持 gRPC Client;
  • 支持 Testing;
  • 提供自动配置和配置属性。

Spring Boot 4.1 已经内置了 gRPC Server、Client、Testing 等能力,开发体验与其他 Spring 技术栈保持一致,gRPC 终于成为 Spring Boot 的默认生态能力。

2、Jackson 配置能力增强

以前,如果要调整 Jackson 的行为,不同的数据格式往往有各自的配置方式。

JSON、XML、CBOR 虽然底层都基于 Jackson,但很多配置并不能统一管理,开发者需要分别处理。而现在,Spring Boot 将这些通用能力进行了抽象。

对于所有格式共享的读写特性,可以直接通过统一的配置项进行控制:

spring.jackson.read.*
spring.jackson.write.*

其中:

  • spring.jackson.read.* 用于控制反序列化(读取)行为;
  • spring.jackson.write.* 用于控制序列化(写入)行为。

除了配置统一之外,Spring Boot 与 Jackson 的整合也进一步增强。

自动配置生成的 Jackson Mapper,现在会自动关联一个 HandlerInstantiator。这个机制最大的变化在于 Jackson 在创建各种处理组件时,可以直接从 Spring 容器中获取 Bean。

这些组件不仅能够自动装配,还能够享受 Spring 提供的依赖注入能力,大幅降低了扩展和维护成本。

与此同时,Spring Boot 还开放了更多 Jackson 底层能力。

Jackson 内部实际上依赖各种 Factory 来创建 Reader、Writer 和底层解析器。现在,开发者可以通过 spring.jackson.factory.* 对这些底层 Factory 进行细粒度配置。

如果属性配置仍然无法满足需求,Spring Boot 还新增了一组 Builder 级别的定制扩展点:

  • JsonFactoryBuilderCustomizer
  • CborFactoryBuilderCustomizer
  • XmlFactoryBuilderCustomizer

可以在自动配置创建对应 Mapper 之前,直接介入 Factory Builder 的构建过程,对 Jackson 的底层实现进行深度定制。

这次 Jackson 的升级,虽然看起来只是一些配置项和扩展接口的调整,但实际上体现了一个非常明确的方向,那就是让 Jackson 的配置更加统一、与 Spring 的集成更加深入,同时开放更多底层定制能力。

3、HTTP Client 新增 SSRF 防护

这个我觉得是 4.1 最容易被忽视,但又最重要的升级。

Spring Boot 4.1 为 HTTP Client 增加了 InetAddressFilter 支持,主要用于防止 SSRF(Server-Side Request Forgery,服务端请求伪造)攻击。

4、可观测性增强

Spring Boot 4.0 已经全面拥抱可观测性,而 4.1 则继续强化。

这次可观测性的更新,重点可以概括为 3 个方面:

  • 上下文传播自动化;
  • 观测规则自动化;
  • OpenTelemetry 能力增强。

其中最值得关注的几个点是:

  • @Async 自动透传 Trace Context;
  • Kafka、RabbitMQ、JVM 指标自定义规则自动生效;
  • OpenTelemetry 新增采样、限流、日志、SSL、环境变量等全链路增强。

对于企业应用来说,Spring Boot 的可观测性能力进一步向开箱即用的生产级方案靠拢。

5、Log4j 文件轮转支持来了

这个也是官方重点提到的增强,以前使用 Log4j 时,如果想做日志切割,很多人会自己配置 RollingFileAppender,但配置起来比较繁琐。

Spring Boot 4.1 增强了对 Log4j 文件轮转(File Rotation) 的支持,支持 4 种滚动策略,满足不同场景下的日志归档需求。

支持的滚动策略:

  • size(默认):按照日志文件大小进行滚动。当日志文件达到指定大小后自动切分,例如达到 100MB 后生成新的日志文件。
  • time:按照时间间隔进行滚动。可以按天、按小时等固定时间周期生成新的日志文件。
  • size-and-time:同时结合文件大小和时间进行滚动。只有满足大小和时间条件时才会触发滚动,兼顾日志容量与归档周期。
  • cron:基于 Cron 表达式进行滚动。可以像定时任务一样灵活控制日志切分时间,例如每天凌晨、每周日、每月 1 号等。

对于大多数线上系统来说,size-and-time 是最实用的方案,它既避免单个日志文件过大,又能保证日志按天或按周期归档。

总结

Spring Boot 4.1 还是挺实用的,这些变化虽然不像 4.0 那样炸裂,但每一个都非常接地气。尤其是 SSRF 防护和 gRPC 官方支持,我认为是这次最值得关注的两个更新。

一个关系到系统安全,一个关系到 Spring 在 RPC 领域的未来布局。

从 Spring Boot 2.x 到 3.x,再到如今的 4.x,Spring Boot 已经不仅仅是一个快速开发框架,而是已经成为 Java 应用开发的标准框架。

话说,你们现在用的是什么版本?准备升级到 Spring Boot 4.1 了吗?

Spring Boot 实战代码已上传 Github:

https://github.com/javastacks/spring-boot-best-practice

后续 R 哥也会继续关注 Spring Boot 的生态演进,以及 Spring AI、Spring Cloud 等相关技术更新,关注公众号 Java 技术栈,第一时间获取最新干货。

如果你还没用过 Spring Boot,这里推荐下我的《Spring Boot 核心技术课》,17 个模块,几乎涉及所有核心技术,包括底层实现原理及代码实战,知识点非常齐全,助你快速打通 Spring Boot 的各个环节。

有需要的直接扫码订阅:

一次订阅,永久学习,免费更新。

早订阅,早学习,早受益。

好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Spring Boot 资讯和干货,关注公众号Java技术栈第一时间推送。

版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注