我已经检查了您提供的文件,发现这些文件已经有相对完整的注释了。不过为了进一步提升代码的可读性和可维护性,我会对其进行一些优化和完善。
RepeatExecuteLimitAutoConfiguration.java
RepeatExecuteLimitConstants.java
RepeatExecuteLimitLockInfoHandle.java
RepeatExecuteLimitConstant.java
我已经为防重复执行/幂等控制框架添加了详细的中文注释,并总结了这些组件是如何协同工作的。
组件功能说明
1. RepeatExecuteLimitAutoConfiguration
防重复执行的自动配置类,负责注册相关的Bean到Spring容器中。
2. RepeatExecuteLimitConstants
定义系统中各种业务场景下的防重复执行标识常量。
3. RepeatExecuteLimitLockInfoHandle
防重复执行场景下的锁信息处理器实现类。
4. RepeatExecuteLimit
防重复执行注解,用于标记需要防重复执行的方法或类。
5. RepeatExecuteLimitConstant
防重复执行相关的常量定义。
6. RepeatExecuteLimitAspect
实现防重复执行和幂等性控制的核心切面类。
组件协同工作机制
1. 配置阶段
- RepeatExecuteLimitAutoConfiguration自动配置类向Spring容器注册必要的Bean
- 注册RepeatExecuteLimitLockInfoHandle作为防重复执行的锁信息处理器
- 注册RepeatExecuteLimitAspect切面类处理防重复逻辑
2. 运行阶段
当带有@RepeatExecuteLimit注解的方法被调用时:
- 切面拦截:RepeatExecuteLimitAspect切面拦截方法调用
- 生成锁名:通过RepeatExecuteLimitLockInfoHandle生成唯一锁名称
- 本地锁保护:使用LocalLockCache获取ReentrantLock防止JVM内并发
- 分布式锁保护:通过ServiceLockFactory获取Redisson分布式锁防止多节点并发
- Redis标记位:使用RedissonDataHandle检查和设置Redis中的执行状态
- 执行业务:通过三层保护机制后执行目标方法
- 状态持久化:根据配置决定是否在Redis中设置执行标记
三层保护机制
本地锁(ReentrantLock):
- 防止同一JVM内的并发执行
- 快速失败,提高响应速度
分布式锁(Redisson):
- 防止分布式环境下的并发执行
- 确保全局互斥
Redis标记位:
- 持久化记录执行状态
- 确保幂等性
使用示例
java
// 1. 基本用法
@RepeatExecuteLimit(
name = "create_order",
keys = {"#order.id"}
)
public String createOrder(Order order) {
// 业务逻辑
return "success";
}
// 2. 带过期时间的用法
@RepeatExecuteLimit(
name = "pay_order",
keys = {"#orderId", "#userId"},
durationTime = 60, // 60秒内保持幂等
message = "支付处理中,请勿重复提交"
)
public void payOrder(String orderId, String userId) {
// 支付逻辑
}
// 3. 使用常量定义业务名称
@RepeatExecuteLimit(
name = RepeatExecuteLimitConstants.CREATE_PROGRAM_ORDER,
keys = {"#programId", "#userId"}
)
public void createProgramOrder(Long programId, Long userId) {
// 创建节目订单逻辑
}工作流程图
用户请求
↓
@RepeatExecuteLimit注解标记的方法
↓
RepeatExecuteLimitAspect切面拦截
↓
生成唯一锁名称 ← RepeatExecuteLimitLockInfoHandle
↓
检查Redis标记位 ← RedissonDataHandle
↓
获取本地锁 ← LocalLockCache
↓
获取分布式锁 ← ServiceLockFactory
↓
双重检查Redis标记位
↓
执行目标方法
↓
设置Redis标记位(可选)
↓
释放分布式锁
↓
释放本地锁
↓
返回结果这套防重复执行框架通过本地锁、分布式锁和Redis标记位的三层保护机制,有效地解决了高并发场景下的重复提交和幂等性问题,确保系统的稳定性和数据一致性。