Files
his/openhis-server-new/SPRINGBOOT_4_UPGRADE_ANALYSIS.md
华佗 554e20f276 feat: Spring Boot 3.5.14 → 4.0.6 升级
核心升级:
- Spring Boot 3.5.14 → 4.0.6
- Spring Framework 6.2.18 → 7.0.7
- Spring Security 6.5.10 → 7.0.5
- Flyway 11.7.2 → 11.14.1

Breaking Changes 适配:
- starter-aop → starter-aspectj (SB4 重命名)
- JDBC/Flyway/Jackson 自动配置拆分到独立模块
- DaoAuthenticationProvider 构造函数变更 (Spring Security 7.0)
- DataSourceProperties 包路径迁移

依赖调整:
- Druid boot3-starter → druid core (手动配置, 避免 SB4 不兼容)
- 新增 spring-boot-starter-quartz
- 新增 spring-boot-starter-cache
- 新增 spring-boot-flyway / spring-boot-jdbc
- PostgreSQL 42.7.4 → 42.7.10

验证: 26/26 测试通过, 1374 API端点正常
2026-06-05 08:43:30 +08:00

194 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Spring Boot 4.0 升级分析报告
> 📅 分析日期: 2026-06-04
> 📌 当前版本: Spring Boot 3.5.14
> 🎯 目标版本: Spring Boot 4.0.6 (最新稳定版)
> ⚠️ 风险等级: 🔴 高 (存在关键组件不兼容)
---
## 1. 版本对比总览
| 组件 | 当前 (SB 3.5.14) | 目标 (SB 4.0.6) | 变化 |
|---|---|---|---|
| **Spring Boot** | 3.5.14 | **4.0.6** | 大版本跳跃 |
| **Spring Framework** | 6.2.18 | **7.0.7** | 大版本跳跃 |
| **Spring Security** | 6.5.10 | **7.0.5** | 大版本跳跃 |
| **Java** | 17+ | **17+** | 不变 |
| **Tomcat** | 10.1.54 | **11.0.21** | 大版本跳跃 |
| **Hibernate** | 6.6.x | **7.2.12** | 大版本跳跃 |
| **Flyway** | 11.7.2 | **11.14.1** | 小版本升级 |
| **Kotlin** | 2.0.x | **2.2.21** | 小版本升级 |
| **Jackson 2** | 2.21.2 | **2.21.2** | 不变 |
| **Jackson 3** | ❌ 无 | **3.1.2** | 🆕 新增 |
| **Quartz** | 2.5.2 | **2.5.2** | 不变 |
| **PostgreSQL** | 42.7.4 | **42.7.10** | 补丁升级 |
---
## 2. 🔴 关键阻塞项 (必须解决才能升级)
### 2.1 MyBatis Plus — 没有 Spring Boot 4 Starter
| 项目 | 状态 |
|---|---|
| `mybatis-plus-spring-boot4-starter` | ❌ **不存在** |
| `mybatis-plus-spring-boot3-starter` 最新版 | 3.5.16 (仅支持 SB 3.x) |
| `mybatis-plus-boot-starter` 最新版 | 3.5.7 (SB 2.x) |
**影响**: MyBatis Plus 是项目核心 ORM没有 Boot 4 Starter 意味着:
- 自动配置可能不兼容 Spring Framework 7.x
- Bean 注册方式可能变化
- 需要手动配置或等待官方适配
**可能方案**:
1.**等待官方发布** — MyBatis Plus 通常在 Spring Boot 大版本发布后 3-6 个月适配
2. 🔧 **手动适配** — 基于 `mybatis-plus-spring-boot3-starter` 修改自动配置类
3. 🔄 **降级使用** — 使用 `mybatis-plus-core` + 手动配置(工作量大)
### 2.2 Druid — 没有 Spring Boot 4 Starter
| 项目 | 状态 |
|---|---|
| `druid-spring-boot4-starter` | ❌ **不存在** |
| `druid-spring-boot-3-starter` 最新版 | 1.2.25 |
| Druid 核心版 | 1.2.25 |
**影响**: Druid 数据源自动配置和监控功能可能不兼容。
**可能方案**:
1. 🔧 **手动配置 DruidDataSource** — 绕过 Spring Boot 自动配置
2. 🔄 **替换为 HikariCP** — Spring Boot 4 默认连接池(已内置)
### 2.3 Flowable — 需要验证
| 项目 | 状态 |
|---|---|
| `flowable-engine` 最新版 | **8.0.0** |
| 当前使用 | 7.1.0 |
| Spring Framework 7 兼容性 | ⚠️ 未确认 |
**影响**: Flowable 8.0.0 可能适配了 Spring Framework 7但需要验证。
---
## 3. 🟡 中等风险项
### 3.1 Jackson 3 引入
Spring Boot 4 同时支持 Jackson 2 和 Jackson 3
- 项目使用 `fastjson2` 作为 JSON 库
- Jackson 3 可能与 fastjson2 的 Kotlin 扩展产生新的冲突
- 需要验证 `springdoc-openapi` 对 Jackson 3 的支持
### 3.2 Tomcat 11.x
- Tomcat 11 基于 Servlet 6.1 (Jakarta EE 11)
- 项目已迁移到 `jakarta.servlet`,理论上兼容
- 需要验证自定义 Filter/Servlet 的兼容性
### 3.3 Spring Security 7.0
- 可能有 API 变更(已在 3.5 中适配了大部分)
- 需要检查 `@EnableMethodSecurity` 等注解是否有变化
### 3.4 Hibernate 7.2
- 项目使用 JPA 相关功能较少(主要是 MyBatis Plus
- 风险较低
---
## 4. 🟢 低风险项
| 组件 | 当前 | SB 4 管理 | 备注 |
|---|---|---|---|
| Springdoc | 2.8.6 | 不管理 | 需要单独验证兼容性 |
| LiteFlow | 2.12.4.1 | 不管理 | 需要验证 Spring Framework 7 兼容性 |
| pagehelper | 2.1.1 | 不管理 | 需要验证 |
| Lombok | 1.18.34 | 不管理 | 低风险 |
| PostgreSQL Driver | 42.7.4 | 42.7.10 | 安全升级 |
---
## 5. 升级路径建议
### 方案 A: 等待生态成熟 (推荐 ⭐)
**时间线**: 2026 Q4 - 2027 Q1
| 阶段 | 时间 | 动作 |
|---|---|---|
| 等待 | 现在 ~ 2026 Q3 | 监控 MyBatis Plus / Druid / Flowable 的 Boot 4 适配进度 |
| 评估 | 2026 Q3 | 确认关键组件适配状态 |
| 升级 | 2026 Q4 | 执行升级 |
| 测试 | 2026 Q4 ~ 2027 Q1 | 全面回归测试 |
**优点**: 风险最低,依赖组件有官方支持
**缺点**: 滞后于 Spring Boot 4 的新特性
### 方案 B: 激进升级 (不推荐)
**时间线**: 立即
| 阶段 | 时间 | 动作 |
|---|---|---|
| 准备 | 1-2 周 | fork MyBatis Plus / Druid 源码,手动适配 Boot 4 |
| 升级 | 1 周 | 修改 POM + 代码适配 |
| 测试 | 2-4 周 | 全面回归测试 |
| 维护 | 持续 | 手动维护 fork 版本 |
**优点**: 最早享受 Spring Boot 4 新特性
**缺点**: 维护成本极高,上游变更需要手动同步
### 方案 C: 渐进升级 (折中方案)
**时间线**: 2026 Q3
1. **Phase 1**: 先升级到 Spring Boot 3.5.16 (最新 3.x)
2. **Phase 2**: 等待 MyBatis Plus 发布 Boot 4 Starter
3. **Phase 3**: 升级到 Spring Boot 4.0.x
**优点**: 风险适中,保持在 3.x 的最新状态
**缺点**: 需要两次升级
---
## 6. 升级收益
如果成功升级到 Spring Boot 4.0.6,可以获得:
| 收益 | 详情 |
|---|---|
| **Spring Framework 7** | 虚拟线程更好的支持、HTTP 接口增强 |
| **Tomcat 11** | 性能提升、Servlet 6.1 支持 |
| **Hibernate 7.2** | 更好的性能和稳定性 |
| **Flyway 11.14** | 更多数据库支持、性能优化 |
| **安全更新** | 最新的安全补丁 |
| **长期支持** | Spring Boot 4.x 将是未来 3 年的主线版本 |
| **Jackson 3** | 新的 JSON 处理能力(但需要迁移) |
| **虚拟线程** | 更好的并发性能Java 21+ |
---
## 7. 结论与建议
### 当前状态
- ✅ Spring Boot 3.5.14 升级已完成并验证通过
- ⚠️ Spring Boot 4.0 升级存在 **2 个关键阻塞项** (MyBatis Plus, Druid)
### 建议
1. **短期 (1-3个月)**: 保持在 Spring Boot 3.5.14,监控依赖组件适配进度
2. **中期 (3-6个月)**: 当 MyBatis Plus 和 Druid 发布 Boot 4 Starter 时,立即评估升级
3. **长期 (6-12个月)**: 执行 Spring Boot 4.0 升级
### 关键监控项
- [ ] [MyBatis Plus GitHub](https://github.com/baomidou/mybatis-plus) — 关注 `mybatis-plus-spring-boot4-starter` 发布
- [ ] [Druid GitHub](https://github.com/alibaba/druid) — 关注 `druid-spring-boot4-starter` 发布
- [ ] [Flowable GitHub](https://github.com/flowable/flowable-engine) — 关注 8.x 对 Spring Framework 7 的兼容性
- [ ] [Springdoc GitHub](https://github.com/springdoc/springdoc-openapi) — 关注对 Jackson 3 的支持
---
*报告生成时间: 2026-06-04 22:30*