From d7c89256846af2d821efc29adc3d1e9c9aade8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Fri, 10 Mar 2023 17:30:25 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=20sonar=E3=80=91DistributedLockHan?= =?UTF-8?q?dler=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lock/aspect/DistributedLockHandler.java | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/jero-boot/jero-boot-starter/jero-boot-starter-lock/src/main/java/com/jero/boot/starter/lock/aspect/DistributedLockHandler.java b/jero-boot/jero-boot-starter/jero-boot-starter-lock/src/main/java/com/jero/boot/starter/lock/aspect/DistributedLockHandler.java index edcba56b..88b9e76a 100644 --- a/jero-boot/jero-boot-starter/jero-boot-starter-lock/src/main/java/com/jero/boot/starter/lock/aspect/DistributedLockHandler.java +++ b/jero-boot/jero-boot-starter/jero-boot-starter-lock/src/main/java/com/jero/boot/starter/lock/aspect/DistributedLockHandler.java @@ -1,24 +1,19 @@ package com.jero.boot.starter.lock.aspect; +import com.jero.boot.starter.lock.annotation.JLock; +import com.jero.boot.starter.lock.enums.LockModel; import lombok.SneakyThrows; 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.reflect.MethodSignature; -import com.jero.boot.starter.lock.annotation.JLock; -import com.jero.boot.starter.lock.enums.LockModel; import org.redisson.RedissonMultiLock; import org.redisson.RedissonRedLock; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.Expression; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -98,25 +93,14 @@ public class DistributedLockHandler extends BaseAspect{ } RLock rLock = null; String keyConstant = jLock.keyConstant(); - if (lockModel.equals(LockModel.AUTO)) { - if (keys.length > 1) { - lockModel = LockModel.REDLOCK; - } else { - lockModel = LockModel.REENTRANT; - } - } + lockModel = getLockModel(keys, lockModel); switch (lockModel) { case FAIR: rLock = redissonClient.getFairLock(getValueBySpEL(keys[0], parameterNames, args, keyConstant).get(0)); break; case REDLOCK: List rLocks = new ArrayList<>(); - for (String key : keys) { - List valueBySpEL = getValueBySpEL(key, parameterNames, args, keyConstant); - for (String s : valueBySpEL) { - rLocks.add(redissonClient.getLock(s)); - } - } + getRedLock(keys, parameterNames, args, keyConstant, rLocks); RLock[] locks = new RLock[rLocks.size()]; int index = 0; for (RLock r : rLocks) { @@ -127,12 +111,7 @@ public class DistributedLockHandler extends BaseAspect{ case MULTIPLE: rLocks = new ArrayList<>(); - for (String key : keys) { - List valueBySpEL = getValueBySpEL(key, parameterNames, args, keyConstant); - for (String s : valueBySpEL) { - rLocks.add(redissonClient.getLock(s)); - } - } + getRedLock(keys, parameterNames, args, keyConstant, rLocks); locks = new RLock[rLocks.size()]; index = 0; for (RLock r : rLocks) { @@ -164,4 +143,24 @@ public class DistributedLockHandler extends BaseAspect{ } return rLock; } + + private LockModel getLockModel(String[] keys, LockModel lockModel) { + if (lockModel.equals(LockModel.AUTO)) { + if (keys.length > 1) { + lockModel = LockModel.REDLOCK; + } else { + lockModel = LockModel.REENTRANT; + } + } + return lockModel; + } + + private void getRedLock(String[] keys, String[] parameterNames, Object[] args, String keyConstant, List rLocks) { + for (String key : keys) { + List valueBySpEL = getValueBySpEL(key, parameterNames, args, keyConstant); + for (String s : valueBySpEL) { + rLocks.add(redissonClient.getLock(s)); + } + } + } }