Spring Boot 4.0.5 发布:9个Bug修复,WebSocket用户需关注

3 阅读3分钟

发布日期: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.propertiesapplication.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

影响:测试中事务管理器自定义配置不生效。


四、依赖升级

依赖新版本
Brave6.3.1
Jackson BOM2.21.2
jOOQ3.19.31
Netty4.2.12.Final
Tomcat11.0.20
Zipkin Reporter3.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 发布说明整理