--- 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 权限实时生效机制中的描述