@Aspect @Component public class DistributedLockAspect {
@Autowired
private RedissonClient redissonClient;
@Around("@annotation(distributedLock)")
public Object around(ProceedingJoinPoint joinPoint, DistributedLock distributedLock) throws Throwable {
String lockKey = distributedLock.lockKey();
int leaseTime = distributedLock.leaseTime();
RLock lock = redissonClient.getLock(lockKey);
try {
// 尝试获取锁,最多等待3秒,锁自动释放时间为leaseTime秒
boolean isLocked = lock.tryLock(3, leaseTime, TimeUnit.SECONDS);
if (!isLocked) {
throw new RuntimeException("Failed to acquire lock for key: " + lockKey);
}
// 执行目标方法
return joinPoint.proceed();
} finally {
// 释放锁
if (lock.isHeldByCurrentThr
Java-异步@Async方法+分布式锁自定义注解(异步方法执行完成后才释放分布式锁)
于 2024-11-18 18:01:08 首次发布