Spring Boot 4.0.1(基于 Spring Framework 6.1+ / Spring Data 2023.1+) 是一次重大升级,有大量破坏性或需适配的变化。以下是 开发者在升级到 Spring Boot 4.0.1 时必须重点关注的修改清单,按模块分类整理:
🔥 一、基础环境与依赖变更
| 变更点 | 说明 | 影响 |
|---|---|---|
| JDK 最低要求 Java 17 | 不再支持 Java 8/11 | 必须升级 JDK |
| Jakarta EE 9+(包名迁移) | javax.* → jakarta.* |
所有 Servlet、Validation、Persistence 相关代码需更新 |
| 移除 Undertow 支持 | 因不兼容 Servlet 6.1 | 原使用 Undertow 的项目必须切换到 Tomcat/Jetty |
| Tomcat 10.1+ / Jetty 12+ | 内嵌容器版本升级 | 自定义容器配置需验证 |
✅ 示例:
java// 旧(Boot 2.x/3.x) import javax.servlet.http.HttpServletRequest; // 新(Boot 4.x) import jakarta.servlet.http.HttpServletRequest;
🗄️ 二、数据访问层(Data Access)
1. Redis
| 变更 | 说明 |
|---|---|
GenericJackson2JsonRedisSerializer → GenericJacksonJsonRedisSerializer |
包路径变为 org.springframework.data.redis.serializer.json.* |
默认序列化行为未变,但必须显式传入 ObjectMapper |
推荐自定义配置时间、null 处理等 |
2. JPA / Hibernate
| 变更 | 说明 |
|---|---|
| Hibernate 6.2+ | 查询语法、类型映射有 breaking change |
@JoinColumn 默认 nullable = true 行为调整 |
需检查外键约束 |
HibernateJpaVendorAdapter 移除部分旧属性 |
如 databasePlatform 改为 hibernate.dialect |
3. JDBC / R2DBC
| 变更 | 说明 |
|---|---|
JdbcTemplate 增强 |
新增 queryForStream() 等方法 |
DatabaseClient(R2DBC)被弃用 |
推荐使用 R2dbcEntityTemplate 或直接用 ConnectionFactory |
🌐 三、Web 层(MVC & WebFlux)
1. API 版本控制(新特性)
java
@GetMapping("/users")
@ApiVersion("2.0") // 框架原生支持
public List<User> getUsersV2() { ... }
需配置:
yaml
spring:
mvc:
apiversion:
enabled: true
default: "1.0"
2. 声明式 HTTP 客户端
替代 Feign/OpenFeign:
java
@HttpExchange("https://api.example.com")
public interface UserService {
@GetExchange("/users/{id}")
User getUser(@PathVariable Long id);
}
需启用扫描:
java
@SpringBootApplication
@ImportHttpServices(basePackages = "com.example.client")
public class App {}
3. PathPattern 解析器默认启用
-
URL 路径匹配更严格(如
/api/v1/users/≠/api/v1/users) -
若需旧版 AntPathMatcher 行为,需手动配置:
java@Bean public PathMatcher pathMatcher() { return new AntPathMatcher(); }
🔐 四、安全(Spring Security)
| 变更 | 说明 |
|---|---|
| Security 配置 DSL 变更 | HttpSecurity 方法链有调整 |
WebSecurityConfigurerAdapter 彻底移除 |
必须使用 @Bean SecurityFilterChain 方式 |
| 默认启用 CSRF + CORS 安全策略 | 无状态 API 需显式关闭 CSRF |
✅ 新写法示例:
java
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.csrf(csrf -> csrf.disable()); // 显式关闭
return http.build();
}
📊 五、监控与可观测性(Actuator & Observability)
| 变更 | 说明 |
|---|---|
| OpenTelemetry 成为首选 | 替代部分 Micrometer Tracing 功能 |
新增 Starter:spring-boot-starter-opentelemetry |
自动集成 OTLP Exporter |
| Actuator 健康检查字段变更 | 如 SSL 检查中 WILL_EXPIRE_SOON → expiringChains |
/metrics 端点格式标准化(OpenMetrics 兼容) |
Prometheus 抓取无需转换 |
⚙️ 六、配置属性(application.yml)重命名
| 旧属性 | 新属性 | 说明 |
|---|---|---|
management.tracing.enabled |
management.tracing.export.enabled |
追踪导出开关 |
spring.dao.exceptiontranslation.enabled |
spring.persistence.exceptiontranslation.enabled |
异常翻译配置 |
server.servlet.context-path |
不变 | 但底层使用 jakarta.servlet |
💡 使用
mvn spring-boot:run启动时,若配置项过期,控制台会打印 WARNING 提示新名称。
🧪 七、测试支持变更
| 变更 | 说明 |
|---|---|
| Testcontainers 深度集成 | @ServiceConnection 自动配置 Redis、PostgreSQL 等 |
@AutoConfigureTestDatabase 行为调整 |
默认不再替换为内存数据库(除非显式指定) |
| MockMvc 默认使用 Jakarta Servlet API | 测试中需使用 MockHttpServletRequest(jakarta 包) |
🧩 八、其他重要变更
| 模块 | 变更 |
|---|---|
| Kotlin | 新增 spring-boot-starter-kotlin-serialization |
| GraalVM Native Image | 原生编译支持大幅增强,spring-native 模块合并进主干 |
| Task Execution | 支持多 TaskDecorator(上下文传递更灵活) |
| Null Safety | 推荐使用 org.jspecify.annotations.Nullable / @NonNull |