升级内容: - 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) 正常初始化
208 lines
6.2 KiB
Markdown
208 lines
6.2 KiB
Markdown
# 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 升级时)
|
||
- [ ] 数据库连接正常
|
||
|