# 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` |
| **当前值** | `1.69` |
| **操作** | 删除 jdk15on,改用 jdk18on |
| **新增依赖** | `org.bouncycastle:bcprov-jdk18on:1.80`
`org.bouncycastle:bcpkix-jdk18on:1.80` |
| **代码影响** | 搜索 `rg "bcprov\|bcpkix" --type java` — 当前无直接引用,仅通过依赖传递 |
| **验证** | `mvn compile` + 启动后检查登录/token 签发 |
| **回滚** | 改回 `1.69` |
**具体操作:**
```xml
1.69
org.bouncycastle
bcprov-jdk18on
1.80
org.bouncycastle
bcpkix-jdk18on
1.80
```
---
## Phase 2: 连接池 & 工具库升级
### 2.1 Druid 1.2.27 → 1.2.28 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — patch 版本 |
| **变更** | `1.2.27` → `1.2.28` |
| **代码影响** | `DruidProperties.java` — API 无变化 |
| **验证** | 启动后检查 Druid 监控页 `/druid/` |
### 2.2 Fastjson2 2.0.58 → 2.0.61 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — patch 版本 |
| **变更** | `2.0.58` → `2.0.61` |
| **代码影响** | 无直接引用(0 个文件),仅依赖传递 |
| **验证** | `mvn compile` |
### 2.3 Hutool 5.3.8 → 5.8.x 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 — minor 版本 |
| **变更** | `5.3.8` → `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 版本 |
| **变更** | `6.6.5` → `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 版本 |
| **变更** | `2.13.0` → `2.21.0` |
| **代码影响** | 无直接引用 |
| **验证** | `mvn compile` |
### 3.3 PostgreSQL Driver 42.2.27 → 42.7.x 🟢
| 项 | 内容 |
|---|---|
| **风险** | 🟢 低 |
| **变更** | `42.2.27` → `42.7.4` |
| **代码影响** | 无,仅 JDBC 驱动 |
| **验证** | 启动后数据库连接正常 |
---
## Phase 4: 文档 & 分页
### 4.1 Swagger → SpringDoc 1.8.x 🟡
| 项 | 内容 |
|---|---|
| **风险** | 🟡 中 — 不同库 |
| **当前** | `3.0.0`(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 版本 |
| **变更** | `5.5.12` → `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 升级时)
- [ ] 数据库连接正常