|
@ -47,9 +47,10 @@ public class NoRepeatSubmitAop { |
|
|
// 如果缓存中有这个url视为重复提交
|
|
|
// 如果缓存中有这个url视为重复提交
|
|
|
Object result = null; |
|
|
Object result = null; |
|
|
RLock lock = null; |
|
|
RLock lock = null; |
|
|
|
|
|
try { |
|
|
try { |
|
|
try { |
|
|
//key 为空则直接跳过 不加锁
|
|
|
//key 为空则直接跳过 不加锁
|
|
|
if (key != null){ |
|
|
if (key != null) { |
|
|
long leaseTime = noRepeatSubmit.leaseTime(); |
|
|
long leaseTime = noRepeatSubmit.leaseTime(); |
|
|
//如果获取不到锁等待0秒直接返回 持锁时间为leaseTime
|
|
|
//如果获取不到锁等待0秒直接返回 持锁时间为leaseTime
|
|
|
lock = distributedLock.getLock(RedisKeys.getNoRepeatSubmitKey(key), leaseTime, NumConstant.ZERO_L, TimeUnit.MILLISECONDS); |
|
|
lock = distributedLock.getLock(RedisKeys.getNoRepeatSubmitKey(key), leaseTime, NumConstant.ZERO_L, TimeUnit.MILLISECONDS); |
|
@ -59,23 +60,18 @@ public class NoRepeatSubmitAop { |
|
|
log.warn("noRepeatSubmit key:{},msg:{}", key, e.getMessage()); |
|
|
log.warn("noRepeatSubmit key:{},msg:{}", key, e.getMessage()); |
|
|
//"未获取到锁,重复提交了
|
|
|
//"未获取到锁,重复提交了
|
|
|
throw new RenException(EpmetErrorCode.REPEAT_SUBMIT.getCode()); |
|
|
throw new RenException(EpmetErrorCode.REPEAT_SUBMIT.getCode()); |
|
|
} finally { |
|
|
|
|
|
distributedLock.unLock(lock); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
//执行业务代码
|
|
|
//因为getLock如果获取失败抛异常 所以不做锁状态的判断
|
|
|
|
|
|
result = pjp.proceed(); |
|
|
result = pjp.proceed(); |
|
|
} finally { |
|
|
} finally { |
|
|
distributedLock.unLock(lock); |
|
|
distributedLock.unLock(lock); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return result; |
|
|
return result; |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private String getKey(String keyExpress, String token) { |
|
|
private String getKey(String keyExpress, String token) { |
|
|
log.debug("getKey param keyExpress:{},token:{}",keyExpress,token); |
|
|
log.debug("getKey param keyExpress:{},token:{}", keyExpress, token); |
|
|
if (StringUtils.isBlank(token)) { |
|
|
if (StringUtils.isBlank(token)) { |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|