标签: #系统设计

系统设计:如何使用AOP设计一个防重提交功能

本文介绍了防重幂等的概念及SpringBoot实现方案。防重幂等旨在防止用户重复提交相同数据导致业务异常,通过AOP+Redis实现。核心设计思路是:将用户路径、请求参数和Token生成唯一ID存入Redis,拦截重复请求。实现方案包括自定义@RepeatSubmit注解(设置间隔时间、时间单位和提示消息)和@RepeatSubmitAspect切面(前置验证、后置处理和异常处理)。切面通过MD5生成唯一标识,Redis存储限制同参数请求,业务成功则保留限制,失败则释放限制。测试验证了2秒内重复提交会触发异常,有效防止了重复提交问题。

开发札记:如何在业务中添加日志系统

本文详细介绍了SpringBoot中三类日志系统的开发实践:系统日志、登录日志和操作日志。系统日志基于Logback框架实现,配置控制台和文件输出,并集成p6spy进行SQL性能分析。登录日志采用SpringEvent事件机制,通过@Async注解实现异步监听,记录用户登录信息。操作日志通过自定义@Log注解和AspectJ切面实现,记录操作类型、请求参数等详细信息,同样使用异步处理提升性能。文章还深入讲解了线程池配置与@Async异步注解的使用,确保日志记录不影响主业务流程,实现高效可靠的日志管理。