CodeQ 后端开发日志(4)—— 业务层 Service 开发:仓库管理、任务关联与 Redis 缓存优化
项目:CodeQ 代码大模型训练语料质量评估平台
开发模块:Service 层仓库管理、分析任务关联与 Redis 缓存优化
当前进度:Repository 与 AnalysisTask 相关 controller、service 业务逻辑编写完成,实现仓库增删改查、Redis 缓存、任务级联删除、操作日志记录,全接口测试通过,业务闭环形成。
一、任务与目标
承接上一篇用户模块开发,本次核心目标是完成代码仓库管理模块全功能实现,作为语料数据的核心入口;同时解决开发中遇到的 Redis 缓存序列化(List 集合、LocalDateTime)、外键约束、缓存一致性等关键技术问题,打通仓库与分析任务的关联逻辑,完善参数校验、统一返回、事务管理、日志审计等工程化能力,让仓库 - 任务模块形成完整业务闭环。
二、开发内容与技术实现思路
1. 项目结构与分层规范延续
本次开发严格沿用 Spring Boot 标准后端分层架构,保持与用户模块一致的代码规范:controller:接口请求层,仅处理请求接收与结果返回service:业务逻辑层,封装核心规则、校验、事务、缓存、日志repository:数据访问层,仅负责数据库 CRUDentity:数据实体,实现序列化、字段校验common:通用工具(R 统一返回、异常处理、Redis 配置)业务层统一使用 @Service 声明,关键操作添加 @Transactional 保证事务一致性,符合企业级开发规范。
2. 仓库管理核心业务实现(RepositoryService)
仓库模块是语料数据的载体,本次实现完整生命周期管理:仓库添加:校验仓库 URL 唯一性、绑定当前用户、入库并记录日志按用户 ID 查询仓库列表:支持 Redis 缓存,提升查询效率按 ID 查询单个仓库:缓存优先,无缓存则查库仓库删除:权限校验、先删除关联分析任务、清理缓存、记录删除日志数据脱敏:敏感信息过滤,返回安全数据
3. Redis 缓存深度修复(核心问题解决)
开发中遇到 Redis 序列化导致的 500 错误,本次系统性修复三类问题:
(1)List 集合存储失败问题:RedisTemplate 直接存储 List 会序列化异常修复:在 getUserRepositories、getUserTasks 方法中,将查询结果包装为 new ArrayList<>(list) 后再存入 Redis
(2)LocalDateTime 序列化失败问题:默认 Jackson 序列化器不支持 Java8 时间类型,报错 Type id handling not implemented修复:重构 RedisConfig,注册 JavaTimeModule,配置 ObjectMapper 支持 LocalDateTime 序列化 / 反序列化;实体类 CodeRepository、AnalysisTask 的时间字段添加 @JsonSerialize (using = LocalDateTimeSerializer.class)、@JsonDeserialize (using = LocalDateTimeDeserializer.class) 注解
(3)实体类未实现序列化修复:CodeRepository、AnalysisTask 全部实现 Serializable 接口,并添加 serialVersionUID,保证 Redis 序列化兼容性
最终缓存策略查询逻辑:先查 Redis 缓存,不存在则查 MySQL,查询结果写入缓存更新逻辑:新增 / 修改 / 删除仓库 / 任务时,主动清理对应缓存键,保证数据一致性缓存键设计:repo:user:{userId}、repo:id:{id}、task:user:{userId},规范易维护


4. 分析任务与仓库关联处理(AnalysisTaskService)
仓库与分析任务存在外键关联,删除仓库时直接删除会触发数据库外键约束:问题:删除仓库 → 报错 foreign key constraint fails解决方案:在 deleteRepository 方法中,先调用 taskService 删除该仓库下所有 AnalysisTask,再执行仓库删除,事务包裹保证原子性;同时清理任务相关缓存,避免脏数据

5. 操作日志记录(OperationLog)
延续用户模块规范,所有仓库敏感操作均记录审计日志:操作类型:ADD_REPO、DELETE_REPO日志内容:用户 ID、操作类型、仓库 ID / 名称、操作时间、详情日志逻辑由 OperationLogService 统一处理,业务解耦,便于维护
6. Controller 层接口开发(RESTful 规范)
完成仓库与任务核心接口,统一使用 R 类返回,异常全局捕获
三、接口测试与功能验证
本地使用 Postman 完成全流程接口测试
测试验证内容:✅ 添加仓库:数据正常入库,记录 ADD_REPO 日志✅ 获取用户仓库列表:Redis 缓存生效,查询速度提升✅ 根据 ID 查询仓库:返回脱敏数据,缓存命中✅ 创建分析任务:关联仓库,数据入库✅ 获取用户任务列表:缓存正常✅ 更新任务状态:数据更新,缓存清理✅ 根据 ID 查询任务:返回完整信息✅ 删除仓库:级联删除关联任务,无外键报错,缓存清理,记录 DELETE_REPO 日志

验证结果:MySQL 数据读写正常,事务一致性保证Redis 缓存读写正常,无序列化 500 错误操作日志完整记录,审计可追溯接口返回格式统一,异常信息规范业务流程完全通畅,无逻辑漏洞

四、技术理解与总结
通过本次仓库模块开发,编者对 Spring Boot 工程化与 Redis 缓存实践有了更深入理解:
Redis 序列化是缓存的核心痛点:List、LocalDateTime、泛型对象等特殊类型,必须针对性配置序列化器,否则极易出现 500 错误;仅靠 @Cacheable 注解无法解决所有问题,自定义 RedisConfig 是关键。
同时,关联数据删除必须遵循 “先子后父” 原则:外键约束是数据库安全机制,业务层必须提前处理关联数据,避免直接删除主表导致异常。
课程设计项目的工程化价值:缓存优化、事务管理、日志审计、异常统一处理,这些细节是区分 “课程作业” 与 “实战项目” 的关键,能显著提升项目专业性与完整性。
本次解决的 Redis 序列化、级联删除、缓存一致性等问题,均为企业级开发高频场景,具备很强的实战参考价值。
五、当前项目进度
- RepositoryService 仓库全功能实现
- AnalysisTaskService 任务核心功能实现
- Redis 缓存配置彻底优化,序列化问题 100% 修复
- 仓库 - 任务关联逻辑、级联删除完成
- RepositoryController、TaskController 接口全部开发
- 统一返回、异常处理、事务管理、日志记录完善
- Postman 全接口测试通过,无报错
- 业务流程闭环,稳定可用
六、AI 使用情况及下一步开发计划
本次开发中,AI 工具重点用于快速定位 Redis 序列化异常原因、提供 Jackson 时间序列化配置方案、优化级联删除逻辑,大幅缩短问题排查与修复时间
下一篇将继续完善关于个人代码仓库的相关业务功能,包括仓库收藏、取消收藏、历史分析记录、个人数据统计等等
更多推荐

所有评论(0)