diff --git a/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/exception/RedissonLockException.java b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/exception/RedissonLockException.java new file mode 100644 index 00000000..625f8502 --- /dev/null +++ b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/exception/RedissonLockException.java @@ -0,0 +1,16 @@ +package vip.mate.core.common.exception; + + +/** + * 获取锁处理异常 + * + * @author zhangyu + */ +public class RedissonLockException extends RuntimeException { + + private static final long serialVersionUID = -6422212844622271825L; + + public RedissonLockException(String message) { + super(message); + } +} diff --git a/mate-core/mate-starter-lock/pom.xml b/mate-core/mate-starter-lock/pom.xml index 65ec6995..edbf0a68 100644 --- a/mate-core/mate-starter-lock/pom.xml +++ b/mate-core/mate-starter-lock/pom.xml @@ -12,6 +12,11 @@ mate-starter-lock + + vip.mate + mate-starter-common + provided + org.redisson redisson @@ -31,4 +36,4 @@ - \ No newline at end of file + diff --git a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/aspect/DistributedLockHandler.java b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/aspect/DistributedLockHandler.java index 5974c622..68bd202a 100644 --- a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/aspect/DistributedLockHandler.java +++ b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/aspect/DistributedLockHandler.java @@ -1,12 +1,13 @@ package vip.mate.core.lock.aspect; +import java.text.MessageFormat; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import vip.mate.core.common.exception.RedissonLockException; import vip.mate.core.lock.RedissonLock; import vip.mate.core.lock.annotation.DistributedLock; @@ -27,33 +28,29 @@ public class DistributedLockHandler { /** * 切面环绕通知 - * @param joinPoint ProceedingJoinPoint + * + * @param joinPoint ProceedingJoinPoint * @param distributedLock DistributedLock * @return Object */ @Around("@annotation(distributedLock)") - public Object around(ProceedingJoinPoint joinPoint, DistributedLock distributedLock) { + public Object around(ProceedingJoinPoint joinPoint, DistributedLock distributedLock) throws Throwable { log.info("[开始]执行RedisLock环绕通知,获取Redis分布式锁开始"); //获取锁名称 String lockName = distributedLock.value(); - //获取超时时间 - int expireSeconds = distributedLock.expireSeconds(); - - if (redissonLock.lock(lockName, expireSeconds)) { - try { - log.info("获取Redis分布式锁[成功],加锁完成,开始执行业务逻辑..."); - return joinPoint.proceed(); - } catch (Throwable throwable) { - log.error("获取Redis分布式锁[异常],加锁失败", throwable); - throwable.printStackTrace(); - } finally { - redissonLock.release(lockName); - } - log.info("释放Redis分布式锁[成功],解锁完成,结束业务逻辑..."); - } else { + //获取超时时间并获取锁 + if (!redissonLock.lock(lockName, distributedLock.expireSeconds())) { log.error("获取Redis分布式锁[失败]"); + throw new RedissonLockException(MessageFormat.format("获取Redis分布式失败:{0}", lockName)); + } + log.info("获取Redis分布式锁[成功],加锁完成,开始执行业务逻辑..."); + try { + return joinPoint.proceed(); + } finally { + redissonLock.release(lockName); + log.info("释放Redis分布式锁[成功],解锁完成,结束业务逻辑..."); + log.info("[结束]执行RedisLock环绕通知"); } - log.info("[结束]执行RedisLock环绕通知"); - return null; } + }