发布日期:2026-03-26 版本:Spring Boot 4.0.5
一、版本概览
Spring Boot 4.0.5 是 4.0.x 系列的维护版本,主要修复了 9 个Bug。
| 类型 | 数量 |
|---|---|
| Bug修复 | 9个 |
| 文档改进 | 3个 |
| 依赖升级 | 6个 |
二、⚠️ 重点Bug修复
Bug 1:WebSocket + Jackson 兼容性问题
问题:当 Jackson 在 classpath 中,但没有 JsonMapper bean 时,WebSocket 应用无法启动。
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method messageConverterMessageHandler
in org.springframework.web.socket.config.WebSocketMessageBrokerConfiguration
required a bean of type 'com.fasterxml.jackson.databind.ObjectMapper'
that could not be found.
影响范围:使用 WebSocket + STOMP 的应用。
修复前(报错):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- 但没有配置 ObjectMapper bean -->
修复后(4.0.5):
Spring Boot 现在会自动处理这种情况,不再强制要求 JsonMapper bean。
Bug 2:WebSocket 任务执行器配置问题
问题:WebSocket 消息的任务执行器只在 Jackson 存在时才自动配置。
影响:使用其他 JSON 库(如 Gson)的 WebSocket 应用可能配置不完整。
修复后:
// 现在无论使用什么 JSON 库,都会正确配置
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
// 任务执行器会被正确注入
}
Bug 3:配置属性覆盖失效
问题:application.properties 或 application.yaml 中的属性覆盖规则失效。
# application.yaml(默认)
app:
name: myapp
timeout: 30
# application-prod.yaml(profile)
app:
name: myapp-prod
# timeout 应该继承默认值 30,但有时会被忽略
修复后:属性覆盖规则恢复正常。
三、其他重要修复
修复4:Flyway 迁移脚本找不到
问题:Native Image 场景下,Flyway 迁移脚本在子目录中无法被发现。
db/migration/V1__init.sql # ✅ 可以找到
db/migration/mysql/V1__init.sql # ❌ 找不到
修复后:子目录中的迁移脚本可以被正确识别。
修复5:@GraphQlTest 不包含 @ControllerAdvice
问题:GraphQL 测试切片不包含全局异常处理器。
@GraphQlTest(GraphQlController.class)
class GraphQlControllerTest {
// @ControllerAdvice 被忽略
// 导致异常处理逻辑未生效
}
修复后:@GraphQlTest 会自动包含 @ControllerAdvice。
修复6:事务自动配置缺失
问题:某些切片测试引入 TransactionAutoConfiguration 时,缺少 TransactionManagerCustomizationAutoConfiguration。
影响:测试中事务管理器自定义配置不生效。
四、依赖升级
| 依赖 | 新版本 |
|---|---|
| Brave | 6.3.1 |
| Jackson BOM | 2.21.2 |
| jOOQ | 3.19.31 |
| Netty | 4.2.12.Final |
| Tomcat | 11.0.20 |
| Zipkin Reporter | 3.5.3 |
五、升级指南
Maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.5</version>
</parent>
Gradle
plugins {
id 'org.springframework.boot' version '4.0.5'
}
兼容性检查
# 检查依赖兼容性
mvn dependency:tree
# 或
./gradlew dependencies
六、WebSocket 用户升级检查清单
如果你使用 WebSocket,升级后请检查:
| 检查项 | 说明 |
|---|---|
| [ ] 应用启动正常 | 确认无 Jackson 相关错误 |
| [ ] STOMP 连接正常 | 测试 WebSocket 连接 |
| [ ] 消息序列化正确 | 验证 JSON 序列化/反序列化 |
| [ ] 任务执行器配置 | 检查线程池配置是否生效 |
| [ ] 错误处理正常 | 测试异常场景 |
七、测试验证
验证1:WebSocket 连接测试
@SpringBootTest
@AutoConfigureMockMvc
class WebSocketTest {
@Autowired
private MockMvc mockMvc;
@Test
void webSocketEndpointExists() throws Exception {
mockMvc.perform(get("/ws"))
.andExpect(status().isOk());
}
}
验证2:配置覆盖测试
@SpringBootTest(properties = {
"app.timeout=60"
})
class PropertyOverrideTest {
@Value("${app.timeout}")
private int timeout;
@Test
void propertyOverridden() {
assertThat(timeout).isEqualTo(60);
}
}
八、总结
| 问题 | 答案 |
|---|---|
| 是否需要升级? | ✅ 推荐,特别是 WebSocket 用户 |
| 有破坏性变更吗? | ❌ 无,纯Bug修复 |
| 升级难度 | 低,直接改版本号即可 |
| 生产就绪? | ✅ 是,稳定版本 |
参考资料
本文基于 Spring Boot 4.0.5 发布说明整理