|
|
---
|
|
|
name: 测试要求增强与权限方案优化
|
|
|
overview: 1. 增强测试要求:代码级100%覆盖(每个类/方法/if-else/case分支)、测试前置流程(修改后必须先测试通过才能继续);2. 权限实时生效方案从"数据库轮询标记"改为"Redis Pub/Sub",利用已有Redis实例零额外中间件
|
|
|
todos:
|
|
|
- id: update-08-redis
|
|
|
content: 更新08-项目技术要求.md中权限实时通知方案为Redis Pub/Sub
|
|
|
status: completed
|
|
|
- id: update-08-test
|
|
|
content: 更新08-项目技术要求.md中测试要求(100%覆盖+测试前置流程)
|
|
|
status: completed
|
|
|
dependencies:
|
|
|
- update-08-redis
|
|
|
- id: update-08-misc
|
|
|
content: 更新08-项目技术要求.md中缓存策略表、缓存管理表、配置项等关联内容
|
|
|
status: completed
|
|
|
dependencies:
|
|
|
- update-08-redis
|
|
|
- id: update-03-redis
|
|
|
content: 更新03-业务流转逻辑.md中权限实时生效描述
|
|
|
status: completed
|
|
|
- id: update-01-redis
|
|
|
content: 更新01-模块划分.md中权限实时生效描述
|
|
|
status: completed
|
|
|
---
|
|
|
|
|
|
## 用户需求
|
|
|
|
|
|
### 需求1:权限实时生效方案优化
|
|
|
|
|
|
当前方案"数据库轮询标记 + Spring Event"每5秒轮询一次数据库,资源消耗大。需要改为更轻量的方案,利用已有Redis实例实现毫秒级权限变更通知,零额外中间件、零数据库压力。
|
|
|
|
|
|
### 需求2:测试要求增强
|
|
|
|
|
|
- **100%代码级覆盖**:每个类、方法、包括方法里if-else、case分支都必须测试到
|
|
|
- **测试前置流程**:每次代码修改后,必须先进行测试,测试通过后才能进行下一步操作
|
|
|
|
|
|
## 方案概述
|
|
|
|
|
|
### 一、权限实时生效:Redis Pub/Sub 替代数据库轮询
|
|
|
|
|
|
**原理**:权限变更时通过 Redis `PUBLISH` 命令发布消息,各服务节点通过 `MessageListener` 订阅频道,收到消息后刷新本地权限缓存。
|
|
|
|
|
|
**优势对比**:
|
|
|
|
|
|
| 对比项 | 数据库轮询(原方案) | Redis Pub/Sub(新方案) |
|
|
|
| --- | --- | --- |
|
|
|
| 数据库压力 | 每5秒N次SQL | 0(不碰数据库) |
|
|
|
| 延迟 | 最大5秒 | 毫秒级(内存操作) |
|
|
|
| 资源消耗 | 定时线程+DB连接 | 复用已有Redis连接,几乎零额外开销 |
|
|
|
| 多节点支持 | 需每节点轮询 | 天然支持(每节点各自订阅) |
|
|
|
| 降级策略 | 无 | Redis断连时,权限缓存TTL(2小时)到期后自然刷新 |
|
|
|
|
|
|
|
|
|
**实现要点**:
|
|
|
|
|
|
- 频道命名:`permission:changed`
|
|
|
- 消息内容:版本号(Long),用于判断是否需要刷新
|
|
|
- 发布时机:角色权限变更、用户角色分配变更
|
|
|
- 订阅方:各服务实例启动时注册 `RedisMessageListenerContainer`
|
|
|
- 降级保障:Redis连接断开时不影响业务,缓存TTL到期后自动刷新
|
|
|
|
|
|
### 二、测试要求增强
|
|
|
|
|
|
- 单元测试覆盖率从70%提升至100%(行覆盖+分支覆盖)
|
|
|
- 新增JaCoCo分支覆盖指标要求
|
|
|
- 新增"9.6 测试前置流程"章节,定义代码修改→测试→下一步的强制流程
|
|
|
- 在7.8代码审查要求中增加测试覆盖率检查项
|
|
|
|
|
|
### 修改范围
|
|
|
|
|
|
3个文档,共约12处修改点:
|
|
|
|
|
|
1. **docs/08-项目技术要求.md**(9处)
|
|
|
|
|
|
- 3.1 权限变更实时通知:方案描述+代码示例
|
|
|
- 3.3 跨实例通信描述
|
|
|
- 5.3 缓存策略表
|
|
|
- 7.8 代码审查要求
|
|
|
- 8.4 缓存管理策略表
|
|
|
- 9.1 单元测试:覆盖率和分支要求
|
|
|
- 9.2 集成测试:权限生效延迟描述
|
|
|
- 新增9.6 测试前置流程
|
|
|
- 10.3 配置项:删除轮询间隔,新增Redis频道配置
|
|
|
|
|
|
2. **docs/03-业务流转逻辑.md**(1处)
|
|
|
|
|
|
- 2.3 权限实时生效流程中的描述
|
|
|
|
|
|
3. **docs/01-模块划分.md**(1处)
|
|
|
|
|
|
- 2.4 权限实时生效机制中的描述 |