先说结论:Spring Boot 3.5 相对 2.x,不是小版本升级,而是一整代(3.0 → 3.5)的现代化改造。3.5 是 3.x 的最后一个 minor,在 2.x 基础上叠加了基础栈换代 + 性能 + 开发体验 + 可观测性 + 运维能力。
一、必须先接受的「代际变化」(2.x → 3.x 基础)
这些从 3.0 就定了,3.5 全部继承:
| 维度 | Spring Boot 2.x | Spring Boot 3.5 |
|---|---|---|
| 最低 Java | Java 8 / 11 | Java 17(支持到 Java 25) |
| EE 规范 | javax.* |
jakarta.*(Jakarta EE 9/10) |
| Spring Framework | 5.x | 6.2.x |
| Spring Security | 5.x(WebSecurityConfigurerAdapter) |
6.x(组件化 / Lambda DSL) |
| Hibernate | 5.x | 6.x(映射、方言、行为有变化) |
| Servlet | Servlet 4 | Servlet 6 |
迁移时最常见的工作量:
- 全项目
javax.servlet→jakarta.servlet、javax.persistence→jakarta.persistence - Security 配置从继承
WebSecurityConfigurerAdapter改为@Bean SecurityFilterChain - 第三方库要确认是否支持 Jakarta
- 建议路径:2.7.x → 3.0 → 3.1 → ... → 3.5,不要一步跳
二、3.x 各版本累积的核心提升(相对 2.x)
1. 性能与运行时(3.0 / 3.2)
-
GraalVM Native Image:AOT 编译,启动可从秒级降到百毫秒级,内存占用明显下降
-
虚拟线程(Virtual Threads):3.2 起一行配置即可: spring.threads.virtual.enabled=true
高并发 I/O 场景下,比 2.x 传统线程模型更能扛
-
CDS(Class Data Sharing):多实例共享类元数据,启动更快
-
SSL 证书热重载:证书轮换不必重启应用
2. 开发体验(3.0 / 3.1 / 3.2)
- 声明式 HTTP 客户端(
@HttpExchange):比 2.x 的 RestTemplate / 自建 Feign 更轻 - RestClient(3.2):RestTemplate 的现代替代,流式 API、同步调用更顺手
- JdbcClient(3.2):比 JdbcTemplate 更简洁的链式数据库访问
- Docker Compose 集成(3.1):自动识别
compose.yaml,本地依赖一键启停 - Testcontainers
@ServiceConnection(3.1):测试里少写@DynamicPropertySource样板代码 - RFC 7807 Problem Details:REST 错误响应标准化
3. 可观测性与运维(3.0 / 3.3 / 3.4 / 3.5)
- Micrometer Observation API:指标、链路、日志统一接入
- SBOM Actuator 端点(3.3):输出软件物料清单,方便安全审计
- 结构化日志(3.4):原生 JSON/ECS 格式,对接 ELK、Loki 更顺
- OpenTelemetry 增强(3.5):支持
OTEL_RESOURCE_ATTRIBUTES、OTEL_SERVICE_NAME等 - SSL 证书监控指标(3.5):
ssl.chains、ssl.chain.expiry,证书过期可告警
4. 安全与云原生(3.1 / 3.3 / 3.4)
- Spring Authorization Server 生产可用
- Service Connections:Redis、Kafka、MongoDB 等测试/本地连接自动配置
- Base64 内联资源配置:证书、密钥可直接写在 yaml 里
@Fallback注解(3.4):主 Bean 不可用时的优雅降级
三、Spring Boot 3.5 特有的提升(在 3.4 之上)
3.5(2025 年 5 月发布)偏 运维打磨 和 配置完善,官方亮点包括:
| 特性 | 说明 |
|---|---|
@ServletRegistration / @FilterRegistration |
注解方式注册 Servlet/Filter,替代部分 *RegistrationBean |
| Bean 后台初始化 | 自动配置 bootstrapExecutor,加快启动 |
spring.task.execution.mode=force |
即使已有自定义 Executor,也可强制用统一 AsyncTaskExecutor |
| WebClient 全局配置属性 | 超时、重定向等可用配置项,与阻塞客户端对齐 |
| 环境变量批量导入配置 | spring.config.import=env:MY_CONFIGURATION 一次导入多行配置 |
| 结构化日志堆栈定制 | logging.structured.json.stacktrace.* 控制堆栈输出 |
| Service Connection SSL | Kafka、Redis、MongoDB 等客户端 SSL 连接支持 |
| Quartz Actuator 触发任务 | POST /actuator/quartz/jobs/{group}/{job} 远程触发 |
| OAuth2 自动配置更细粒度 | Servlet / Reactive 场景拆分更清楚 |
| 云原生构建改进 | Buildpacks 默认切到 Ubuntu Noble;Maven/Gradle 插件支持 Docker config.json 认证 |
3.5 也有一些 破坏性收紧(从 3.4 升级时要注意):
heapdump端点默认access=NONE,要显式开放.enabled配置属性只接受true/false- Profile 命名规则更严格
- 自动配置的
TaskExecutor只保留applicationTaskExecutor这个名字
四、和 2.x 比,你会「体感」最明显的几点
- 必须 Java 17+,能用 Record、Pattern Matching、Text Blocks 等现代语法
- 迁移成本高:
javax→jakarta、Security、Hibernate 6 都要动 - 性能更好:虚拟线程、Native Image、CDS
- 本地开发更顺:Docker Compose、Testcontainers 深度集成
- 上云/运维更成熟:结构化日志、SBOM、SSL 监控、OpenTelemetry
- API 更现代:RestClient、JdbcClient、声明式 HTTP Client
五、升级建议(务实版)
2.x(非 2.7)→ 2.7.x → 3.0 → 3.1 → 3.2 → 3.3 → 3.4 → 3.5
- 在 2.7 清掉所有 deprecation 警告
- 用 OpenRewrite 或 IDE 批量做
javax→jakarta - 加
spring-boot-properties-migrator辅助发现废弃配置 - 若还在 2.x,优先评估能否上 Java 17,这是硬门槛
补充:3.5 的 OSS 支持到 2026 年 6 月;长期维护可能要规划 Spring Boot 4.0(需 Spring Framework 7)。
一句话:Spring Boot 3.5 相比 2.x,是用 Java 17 + Jakarta + 新 Spring 生态 换一代底座,并在 性能(虚拟线程/Native)、开发效率(Compose/Testcontainers)、可观测与运维(结构化日志/SBOM/SSL 监控) 上全面领先;代价是 2.x → 3.x 迁移工作量大,适合新项目直接用 3.5,老项目按阶段升级。