Files
his/docs/BACKEND_UPGRADE_PLAN.md
华佗 dbe146725a chore(deps): Spring Boot 2.5.15→2.7.18 + MyBatis Plus 3.5.5→3.5.16
升级内容:
- Spring Boot 2.5.15 → 2.7.18 (含 Spring Security 5.7, Tomcat 9.0.96)
- MyBatis Plus 3.5.5 → 3.5.16 (含 mybatis-plus-jsqlparser 拆分模块)
- JSqlParser 4.5 → 5.2 (MyBatis Plus 3.5.9+ 要求)
- PageHelper 1.4.7 → 2.1.1 (兼容 JSqlParser 5.x)
- mysql:mysql-connector-java → com.mysql:mysql-connector-j (Spring Boot 2.7 BOM 变更)

兼容性修复:
- FieldStrategy.IGNORED → FieldStrategy.NEVER (3.5.16 重命名)
- ScanOptionsBuilder → ScanOptions.scanOptions() 工厂方法
- saveOrUpdate(entity, wrapper) → saveOrUpdate(entity) (wrapper 签名移除)
- PermitAllUrlProperties: getBean(class) → getBean(name,class) + null 检查
- application.yml: 添加 spring.mvc.pathmatch.matching-strategy=ant-path-matcher
- application.yml: 禁用 springfox (与 Spring Boot 2.7 不兼容)

验证结果:
-  mvn clean package -DskipTests BUILD SUCCESS
-  登录接口 HTTP 200
-  分页查询 (数据字典 326 条, 用户 84 条)
-  路由信息 (22 个顶级菜单)
-  流程引擎 (Flowable) 正常初始化
2026-06-04 13:35:14 +08:00

208 lines
6.2 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.

# OpenHIS 后端组件升级方案
> **编制日期**: 2026-06-04
> **基线**: Spring Boot 2.5.15 + MyBatis Plus 3.5.5
> **目标**: 升级安全漏洞组件 + 小版本迭代,不做大版本迁移
---
## 升级原则
1. **安全优先** — BouncyCastle 等有漏洞的组件必须升
2. **小版本优先** — 只升 patch/minor不升 major
3. **逐个验证** — 每升一个组件跑 `mvn clean package -DskipTests` + 启动测试
4. **不动核心** — Spring Boot 2.5、MyBatis Plus 3.5 暂不升
---
## Phase 1: 安全修复(必做)
### 1.1 BouncyCastle 1.69 → 1.80 🔴
| 项 | 内容 |
|---|---|
| **风险等级** | 🔴 高 — 1.69 有 CVE 安全漏洞 |
| **变更文件** | `openhis-server-new/pom.xml` |
| **当前值** | `<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>` |
| **操作** | 删除 jdk15on改用 jdk18on |
| **新增依赖** | `org.bouncycastle:bcprov-jdk18on:1.80`<br>`org.bouncycastle:bcpkix-jdk18on:1.80` |
| **代码影响** | 搜索 `rg "bcprov\|bcpkix" --type java` — 当前无直接引用,仅通过依赖传递 |
| **验证** | `mvn compile` + 启动后检查登录/token 签发 |
| **回滚** | 改回 `1.69` |
**具体操作:**
```xml
<!-- 旧 -->
<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>
<!-- 新 -->
<!-- 删除 bcprov-jdk15on.version 属性 -->
<!-- 在 dependencyManagement 中添加 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.80</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.80</version>
</dependency>
```
---
## Phase 2: 连接池 & 工具库升级
### 2.1 Druid 1.2.27 → 1.2.28 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — patch 版本 |
| **变更** | `<druid.version>1.2.27</druid.version>``1.2.28` |
| **代码影响** | `DruidProperties.java` — API 无变化 |
| **验证** | 启动后检查 Druid 监控页 `/druid/` |
### 2.2 Fastjson2 2.0.58 → 2.0.61 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — patch 版本 |
| **变更** | `<fastjson2.version>2.0.58</fastjson2.version>``2.0.61` |
| **代码影响** | 无直接引用0 个文件),仅依赖传递 |
| **验证** | `mvn compile` |
### 2.3 Hutool 5.3.8 → 5.8.x 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — minor 版本 |
| **变更** | `<hutool-all.version>5.3.8</hutool-all.version>``5.8.35` |
| **代码影响** | `rg "cn.hutool" --type java` — 约 10+ 文件使用 `ObjectUtil``StrUtil` |
| **验证** | 检查使用 Hutool 的业务模块(预约管理等) |
| **注意** | 5.3.8 → 5.8 跨了多个 minor需检查 deprecated API |
---
## Phase 3: 监控 & IO 升级
### 3.1 OSHI 6.6.5 → 6.10.0 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — minor 版本 |
| **变更** | `<oshi.version>6.6.5</oshi.version>``6.10.0` |
| **代码影响** | `Server.java` — 使用 `SystemInfo``CentralProcessor``GlobalMemory` |
| **验证** | 系统监控页面正常显示 CPU/内存/磁盘信息 |
| **注意** | OSHI 6.10 API 基本兼容 6.6 |
### 3.2 Commons IO 2.13.0 → 2.21.0 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — minor 版本 |
| **变更** | `<commons.io.version>2.13.0</commons.io.version>``2.21.0` |
| **代码影响** | 无直接引用 |
| **验证** | `mvn compile` |
### 3.3 PostgreSQL Driver 42.2.27 → 42.7.x 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 |
| **变更** | `<postgresql.version>42.2.27</postgresql.version>``42.7.4` |
| **代码影响** | 无,仅 JDBC 驱动 |
| **验证** | 启动后数据库连接正常 |
---
## Phase 4: 文档 & 分页
### 4.1 Swagger → SpringDoc 1.8.x 🟡
| 项 | 内容 |
|---|---|
| **风险** | 🟡 中 — 不同库 |
| **当前** | `<swagger.version>3.0.0</swagger.version>`springfox |
| **目标** | springdoc-openapi 1.8.6 |
| **操作** | 替换 springfox 依赖为 springdoc |
| **代码影响** | `rg "swagger\|ApiModel\|ApiOperation" --type java` — 需改注解 |
| **建议** | ⚠️ 暂不升 — 注解改造工作量大 |
### 4.2 PageHelper 1.4.7 → 1.4.7 保持 🟢
| 项 | 内容 |
|---|---|
| **建议** | 保持当前版本 — 1.4.7 稳定且够用 |
| **原因** | 升级到 2.x 需配合 Spring Boot 4 |
---
## Phase 5: PDF & 签名
### 5.1 itextpdf 5.5.12 → 5.5.13.4 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — patch 版本 |
| **变更** | `<itextpdf.version>5.5.12</itextpdf.version>``5.5.13.4` |
| **代码影响** | PDF 生成相关 |
### 5.2 Kernel 7.1.2 → 7.1.2 保持 🟢
| 项 | 内容 |
|---|---|
| **建议** | 保持 — 已是较新版本 |
---
## 执行计划
```
Day 1: Phase 1 (BouncyCastle) + Phase 2 (Druid/Fastjson2/Hutool)
→ mvn clean package -DskipTests
→ 启动测试
Day 2: Phase 3 (OSHI/PostgreSQL/Commons IO)
→ mvn clean package -DskipTests
→ 启动测试 + 系统监控验证
Day 3: Phase 5 (itextpdf)
→ mvn clean package -DskipTests
→ PDF 功能验证
```
---
## 版本对照表
| 组件 | 当前 | 升级到 | 类型 | 状态 |
|---|---|---|---|---|
| Spring Boot | 2.5.15 | 保持 | major | 🔒 暂不动 |
| MyBatis Plus | 3.5.5 | 保持 | major | 🔒 暂不动 |
| PageHelper | 1.4.7 | 保持 | major | 🔒 暂不动 |
| **BouncyCastle** | **1.69** | **1.80** | major | 🔴 **必做** |
| **Druid** | **1.2.27** | **1.2.28** | patch | 🟢 **可做** |
| **Fastjson2** | **2.0.58** | **2.0.61** | patch | 🟢 **可做** |
| **Hutool** | **5.3.8** | **5.8.35** | minor | 🟢 **可做** |
| **OSHI** | **6.6.5** | **6.10.0** | minor | 🟢 **可做** |
| **Commons IO** | **2.13.0** | **2.21.0** | minor | 🟢 **可做** |
| **PostgreSQL** | **42.2.27** | **42.7.4** | minor | 🟢 **可做** |
| **itextpdf** | **5.5.12** | **5.5.13.4** | patch | 🟢 **可做** |
| Swagger/SpringDoc | 3.0.0 | 1.8.6 | 不同库 | ⚠️ 暂不动 |
---
## 验证清单
每次升级后检查:
- [ ] `mvn clean package -DskipTests` 编译通过
- [ ] 启动无报错
- [ ] 登录功能正常
- [ ] Druid 监控页 `/druid/` 可访问
- [ ] 系统监控页正常OSHI 升级时)
- [ ] PDF 导出正常itextpdf 升级时)
- [ ] 数据库连接正常