如果你这段时间一直在关注 Spring Boot 4.x,大概率会有一种感觉:
4.0 刚切到 Jakarta、Spring Framework 7、Java 新基线这条主线,很多项目还没完全消化完,4.1 又带来了一批面向工程化和生产环境的增强。
问题是,Spring Boot 4.1 的变化不少,如果只是逐条看官方说明,很容易记住一堆名词,却不知道真正该关注什么。
哪些是升级前必须检查的破坏性变化?
哪些是可以马上用起来的新能力?
哪些只是依赖版本滚动,不需要立刻改代码?
这篇文章不逐条翻译官方文档,而是把 Spring Boot 4.1 的主要变化整理成一份「开发者升级清单」。你可以按清单逐项检查自己的项目。

Spring Boot 4.1 升级清单总览
如果只用一分钟了解 Spring Boot 4.1,可以先记住这 7 件事:
下面按「升级检查 → 新功能 → 运维观测 → 构建打包 → 依赖变化」的顺序展开。
Spring Boot 4.1 中,Spring Boot 4.0 已经标记为 deprecated 的类、方法和属性开始被移除。
这意味着,如果你的项目在 4.0 升级时只是「能跑就行」,没有处理 IDE 或编译器里的 deprecated 警告,到了 4.1 可能就会直接变成编译错误。
建议第一步先做这件事:
mvn -DskipTests compile或者:
./gradlew compileJava然后重点看 deprecated API、配置属性和 starter 依赖。
尤其要注意 Derby。Apache Derby 项目已经宣布退休,Spring Boot 4.1 中对 Derby 的集成也进入 deprecated 状态,包括:
org.springframework.boot.jdbc.DatabaseDriver.DERBYorg.springframework.boot.jdbc.EmbeddedDatabaseConnection.DERBY如果你只是在测试里用嵌入式数据库,优先考虑迁移到 H2 或 HSQL。
升级不是从改版本号开始,而是从清理历史债开始。
Spring Boot 4.1 支持的 jOOQ 版本变为 3.20,而 jOOQ 3.20 要求 Java 21 或更高版本。
这不是所有项目都会踩中的变化,但如果你的项目使用 jOOQ,就必须提前确认运行时和构建环境。
检查清单:
很多团队升级 Spring Boot 时,只盯着 spring-boot-starter-parent 的版本,却忘了 CI 镜像、基础镜像、构建插件也可能跟不上。
结果就是:本地能跑,流水线挂了。
-DskipTestsSpring Boot 4.1 里还有一个容易被忽略的构建变化:
你不能再依赖 Maven 命令中的 -DskipTests 来跳过测试 AOT 处理。
Spring Boot Maven Plugin 现在只响应 maven.test.skip,这是为了和其他 Maven 核心插件保持一致。
也就是说,如果你过去的 CI 命令是:
mvn package -DskipTests现在需要重新检查它是否真的跳过了你想跳过的阶段。
如果目的是完全跳过测试相关处理,应该改成:
mvn package -Dmaven.test.skip=true这类变化看起来很小,但非常适合放进升级 checklist。因为它不会影响业务代码,却会影响构建时间和流水线行为。
Spring Boot 4.1 加入了 Spring gRPC 支持,并提供参考文档与 @GrpcAdvice 支持。
这说明 gRPC 不再只是生态里「自己拼装」的能力,而是进入 Spring Boot 官方自动配置体系。
官方能力包括:
spring-boot-grpc-serverspring-boot-grpc-clientspring-boot-grpc-test@GrpcAdvice对后端团队来说,这个变化很关键。
过去你在 Spring Boot 项目里做 gRPC,往往要关心 starter、protobuf、server 生命周期、client 注入、测试支持等一堆细节。4.1 的方向是把这些能力纳入 Boot 的自动配置体验。
如果你的系统里有高性能内部 RPC、微服务间强类型通信、或者多语言服务协作,gRPC 支持值得重点跟进。
Spring Boot 4.1 对可观测性的增强非常密集。
首先,@Async 方法可以自动传播上下文。这意味着跨线程执行时,trace、observation 等上下文信息更容易保持一致。
其次,observation conventions 和 meter conventions 的自动应用也更完善。例如 Kafka、Rabbit、JVM memory、thread、class loading、CPU 等相关约定,都能更自然地接入自动配置。
OTLP 指标导出也支持压缩:
management.otlp.metrics.export.compression-mode=gzipOpenTelemetry 相关增强包括:
management.opentelemetry.enabledmanagement.opentelemetry.tracing.sampler这对云原生部署很有价值。因为很多平台更习惯通过环境变量注入观测配置,而不是写死在 application.yml 里。
可观测性的趋势很清楚:少写胶水代码,多用标准配置。
Jackson 在 4.1 里也有几处重要增强。
CBOR、JSON、XML 等多格式通用的读写特性,可以通过下面两类属性自动配置:
spring.jackson.read.*spring.jackson.write.*Jackson factory 也支持配置:
spring.jackson.factory.*这可以用来细调 Jackson 的 read/write constraints。
同时,Spring Boot 4.1 还支持更高级的 customizer callback:
JsonFactoryBuilderCustomizerCborFactoryBuilderCustomizerXmlFactoryBuilderCustomizer自动配置的 JSON、XML、CBOR mapper 会使用 HandlerInstantiator,从 Spring ApplicationContext 中创建 handler 实例。
如果你的项目对 JSON 解析边界、XML 处理、CBOR 格式、反序列化安全或自定义 handler 有要求,这些变化都值得看。
Spring Boot 4.1 中一个非常值得关注的变化是:阻塞式和响应式 HTTP Client 都可以配置 InetAddressFilter,用来阻止访问特定地址。
官方明确提到,这个功能适合用于缓解 SSRF 攻击。
SSRF 的典型风险是:用户输入一个 URL,服务端代替用户发起请求,结果访问到了内网地址、云厂商元数据地址或其他敏感资源。
Spring Boot 4.1 把这类出站请求限制能力放到 HTTP Client 配置层,意味着团队可以更标准化地做安全加固。
如果你的系统里有这些功能,建议重点关注:
这类场景都可能触发 SSRF 风险。
只校验用户输入不够,出站请求也要有边界。
Spring Boot 4.1 还有一些看似零散、但很实用的增强。
Spring Boot 4.1 新增 spring.datasource.connection-fetch,可选值包括:
eagerlazy当设置为 lazy 时,自动配置的连接池 DataSource 会被 LazyConnectionDataSourceProxy 包装,只有真正需要 JDBC statement 时才获取物理连接。
这对减少无效连接占用、优化事务边界内的连接使用有帮助。
Spring Boot 4.1 新增 Spring Data Redis @RedisListener endpoint 自动配置。
如果应用没有定义 RedisMessageListenerContainer,Spring Boot 会注册默认容器,让 listener 方法可以被发现和调用。
同时,spring-boot-starter-data-redis 现在也声明了对 spring-messaging 的依赖,因为这个功能需要它。
Docker Compose 支持也有增强:当调用 docker compose up 或 docker compose start 失败时,Spring Boot 会记录 docker compose logs 的输出。
日志级别由下面的属性控制:
spring.docker.compose.start.log-level=info这对本地开发非常友好。以前 Compose 起不来,开发者还要自己去查容器日志;现在 Spring Boot 能在失败时直接带出更多上下文。
Spring Boot 4.1 在构建工具链上也有不少细节调整。
Gradle 插件的 bootBuildImage 任务支持通过命令行指定环境变量:
./gradlew bootBuildImage --environment BP_JVM_VERSION=21如果同一个环境变量在命令行和 build script 中都配置了,命令行优先。
BuildInfo Gradle 任务默认生成文件名调整为:
META-INF/build-info.properties之前是:
build-info.properties如果你有工具或脚本依赖旧路径,需要检查。
Maven plugin 支持从 classpath 加载 layers 配置。自定义 layers 可以放在:
META-INF/spring/layers/<name>.xml并作为 plugin dependency 添加。
如果你的团队在做容器镜像分层优化,这个变化会让 layers 配置更容易复用。
Spring Boot 4.1 对 RabbitMQ 和 AMQP 能力有过比较明显的调整方向,包括为 AMQP 1.0 支持做准备,以及探索 RabbitMQ 相关模块和 starter 的拆分。
这里建议团队保持谨慎。
RabbitMQ 和 AMQP 属于强基础设施能力,牵涉到依赖、starter、自动配置、连接工厂、消息监听容器和部署环境。任何迁移都不应该只看一段说明就直接改生产依赖。
更稳妥的做法是:
这类基础设施改动,重点不是「能不能编译」,而是「语义有没有变」。
Spring Boot 4.1 中,info endpoint 增加了更多 process 信息:
process.uptimeprocess.startTimeprocess.currentTimeprocess.timezoneprocess.localeprocess.workingDirectoryActuator info endpoint 现在也会返回 truststore 中的 certificates。
同时,truststore 证书的过期时间也可以作为 metrics 暴露。
这类变化对平台团队和运维团队很有价值。
以前排查「服务到底启动多久了」「运行目录是什么」「证书什么时候过期」,往往要靠日志、脚本或额外探针。现在部分信息可以直接从 actuator 和 metrics 体系里拿到。
Spring Boot 4.1 升级了一批 Spring 项目和第三方依赖。
比较重要的 Spring 生态变化包括:
第三方依赖里也有不少关键项:
升级 Spring Boot,本质上也是升级一整套依赖管理矩阵。
如果你的项目对数据库迁移、消息队列、链路追踪、缓存、序列化非常敏感,建议不要只跑应用启动测试,还要跑完整集成测试。
如果你准备从 Spring Boot 4.0 升到 4.1,可以按下面这份清单走:
检查项 | 重点动作 |
|---|---|
Deprecated API | 先清理 4.0 中已经废弃的类、方法、属性 |
Java 版本 | 使用 jOOQ 时确认 Java 21+ |
数据库 | Derby 用户评估迁移到 H2 或 HSQL |
Maven 构建 | 检查 -DskipTests 与 maven.test.skip 的差异 |
gRPC | 评估是否引入官方 gRPC server/client/test 支持 |
可观测性 | 检查 OpenTelemetry、OTLP、SSL bundle、环境变量配置 |
HTTP Client | 对外请求场景评估 InetAddressFilter 做 SSRF 防护 |
JDBC | 需要时评估 lazy connection fetching |
Redis | 使用 @RedisListener 时关注自动配置变化 |
Docker Compose | 本地开发环境可利用失败日志增强排障 |
Gradle | 检查 build-info 输出路径变化 |
Maven layers | 镜像分层配置可考虑 classpath 复用 |
RabbitMQ/AMQP | 单独验证消息基础设施相关变化,不要盲目迁移 |
依赖生态 | 对 Flyway、OpenTelemetry、Kafka、Security 等跑集成测试 |
Spring Boot 4.1 不是一个只有「大功能」的版本。
它更像是一次面向生产细节的补强:gRPC、OpenTelemetry、SSRF 防护、JDBC 连接获取、Redis Listener、Docker Compose 日志、构建分层配置,都在把框架体验往更完整的工程化方向推。
如果你的项目还停留在「能启动就算升级成功」,这次建议换一种方式:
先拿这份清单过一遍。
再决定哪些变化立刻用,哪些变化先观望,哪些变化必须进测试计划。
有你踩过的 Spring Boot 4.1 升级坑,也欢迎在评论区补充。