Procházet zdrojové kódy

fix(app):
1.bug修复

wzq před 1 dnem
rodič
revize
dedcf37806

+ 1 - 1
national-motion-module-system/national-motion-system-biz/pom.xml

@@ -46,7 +46,7 @@
 		</dependency>
 		<dependency>
 			<groupId>org.redisson</groupId>
-			<artifactId>redisson-spring-boot-starter</artifactId>
+			<artifactId>redisson</artifactId>
 		</dependency>
 	</dependencies>
 	

+ 6 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/UserServiceImpl.java

@@ -24,10 +24,12 @@ import org.jeecg.modules.system.app.entity.FamilyMembers;
 import org.jeecg.modules.system.app.entity.StatisticsInfo;
 import org.jeecg.modules.system.app.mapper.FamilyMembersMapper;
 import org.jeecg.modules.system.app.mapper.StatisticsInfoMapper;
-import org.jeecg.modules.system.entity.*;
+import org.jeecg.modules.system.entity.SysAnnouncement;
+import org.jeecg.modules.system.entity.SysAnnouncementSend;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.mapper.*;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -63,8 +65,8 @@ public class UserServiceImpl implements IUserService {
     @Resource
     private RedisUtil redisUtil;
 
-    @Autowired
-    StatisticsInfoMapper statisticsInfoMapper;
+    @Resource
+    private StatisticsInfoMapper statisticsInfoMapper;
 
     @Override
     @Transactional

+ 62 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/redission/RedisDistributedLocker.java

@@ -0,0 +1,62 @@
+package org.jeecg.modules.redission;
+ 
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+ 
+import java.util.concurrent.TimeUnit;
+ 
+/**
+ * redisson操作类
+ */
+@Component
+public class RedisDistributedLocker {
+ 
+    @Autowired
+    private RedissonClient redissonClient;
+ 
+    public RLock lock(String lockKey) {
+        RLock lock = redissonClient.getLock(lockKey);
+        lock.lock();
+        return lock;
+    }
+ 
+    public RLock lock(String lockKey, int leaseTime) {
+        RLock lock = redissonClient.getLock(lockKey);
+        lock.lock(leaseTime, TimeUnit.SECONDS);
+        return lock;
+    }
+ 
+    public RLock lock(String lockKey, TimeUnit unit ,int timeout) {
+        RLock lock = redissonClient.getLock(lockKey);
+        lock.lock(timeout, unit);
+        return lock;
+    }
+ 
+    public boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
+        RLock lock = redissonClient.getLock(lockKey);
+        try {
+            return lock.tryLock(waitTime, leaseTime, unit);
+        } catch (InterruptedException e) {
+            return false;
+        }
+    }
+ 
+    public boolean tryLock(String lockKey) {
+        RLock lock = redissonClient.getLock(lockKey);
+        return lock.tryLock();
+    }
+ 
+    public void unlock(String lockKey) {
+        RLock lock = redissonClient.getLock(lockKey);
+        //查看是自己加的锁吗,是自己的锁再释放
+        if (lock.isHeldByCurrentThread()) {
+            lock.unlock();
+        }
+    }
+ 
+    public void unlock(RLock lock) {
+        lock.unlock();
+    }
+}

+ 101 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/redission/RedisLockUtils.java

@@ -0,0 +1,101 @@
+package org.jeecg.modules.redission;
+
+import org.redisson.api.RLock;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.concurrent.TimeUnit;
+ 
+/**
+ * redis分布式锁工具类
+ */
+@Component
+public class RedisLockUtils {
+ 
+    @Resource
+    private RedisDistributedLocker locker;
+ 
+    private static RedisDistributedLocker distributedLocker;
+ 
+    @PostConstruct
+    private void init() {
+        distributedLocker = locker;
+    }
+ 
+    /**
+     * 加锁
+     * @param lockKey
+     * @return
+     */
+    public static RLock lock(String lockKey) {
+        return distributedLocker.lock(lockKey);
+    }
+ 
+    /**
+     * 释放锁
+     * @param lockKey
+     */
+    public static void unlock(String lockKey) {
+        distributedLocker.unlock(lockKey);
+    }
+ 
+    /**
+     * 释放锁
+     * @param lock
+     */
+    public static void unlock(RLock lock) {
+        distributedLocker.unlock(lock);
+    }
+ 
+    /**
+     * 带超时的锁
+     * @param lockKey
+     * @param timeout 超时时间   单位:秒
+     */
+    public static RLock lock(String lockKey, int timeout) {
+        return distributedLocker.lock(lockKey, timeout);
+    }
+ 
+    /**
+     * 带超时的锁
+     * @param lockKey
+     * @param unit 时间单位
+     * @param timeout 超时时间
+     */
+    public static RLock lock(String lockKey, int timeout, TimeUnit unit ) {
+        return distributedLocker.lock(lockKey, unit, timeout);
+    }
+ 
+    /**
+     * 尝试获取锁
+     * @param lockKey
+     * @param waitTime 最多等待时间
+     * @param leaseTime 上锁后自动释放锁时间
+     * @return
+     */
+    public static boolean tryLock(String lockKey, int waitTime, int leaseTime) {
+        return distributedLocker.tryLock(lockKey, TimeUnit.SECONDS, waitTime, leaseTime);
+    }
+ 
+    /**
+     * 尝试获取锁
+     * @param lockKey
+     * @param unit 时间单位
+     * @param waitTime 最多等待时间
+     * @param leaseTime 上锁后自动释放锁时间
+     * @return
+     */
+    public static boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
+        return distributedLocker.tryLock(lockKey, unit, waitTime, leaseTime);
+    }
+ 
+    /**
+     * 尝试获取锁,不设置等待和过期时间,看门狗才能真正生效,自动续期
+     * @param lockKey
+     * @return
+     */
+    public static boolean tryLock(String lockKey) {
+        return distributedLocker.tryLock(lockKey);
+    }
+}

+ 3 - 25
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/redission/RedissonDelayQueue.java

@@ -1,18 +1,12 @@
 package org.jeecg.modules.redission;
 
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import io.netty.channel.nio.NioEventLoopGroup;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import org.jeecg.modules.system.app.service.IAppOrderService;
-import org.redisson.Redisson;
 import org.redisson.api.RBlockingQueue;
 import org.redisson.api.RDelayedQueue;
 import org.redisson.api.RedissonClient;
-import org.redisson.config.Config;
-import org.redisson.config.SingleServerConfig;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -30,7 +24,8 @@ import java.util.stream.Collectors;
 @Slf4j
 public class RedissonDelayQueue {
 
-    private RedissonClient redissonClient;
+    @Resource
+    private RedissonConfig redissonConfig;
 
     @Resource
     private IAppOrderService appOrderService;
@@ -38,12 +33,6 @@ public class RedissonDelayQueue {
     private RDelayedQueue<String> delayQueue;
     private RBlockingQueue<String> blockingQueue;
 
-    @Value("${spring.redis.host}")
-    private String host;
-
-    @Value("${spring.redis.password}")
-    private String password;
-
     @PostConstruct
     public void init() {
         initDelayQueue();
@@ -51,18 +40,7 @@ public class RedissonDelayQueue {
     }
 
     private void initDelayQueue() {
-        Config config = new Config();
-
-        SingleServerConfig serverConfig = config.useSingleServer();
-        serverConfig.setAddress("redis://" + host +":6379");
-        if (StrUtil.isNotEmpty(password)){
-            serverConfig.setPassword(password);
-        }
-        //设置连接redis的心跳间隔(30s/次)
-        serverConfig.setPingConnectionInterval(30000);
-        config.useSingleServer();
-        config.setEventLoopGroup(new NioEventLoopGroup(16));
-        redissonClient = Redisson.create(config);
+        RedissonClient redissonClient = redissonConfig.redissonClient();
 
         blockingQueue = redissonClient.getBlockingQueue("OrderTimeOutTask");
         delayQueue = redissonClient.getDelayedQueue(blockingQueue);

+ 7 - 5
national-motion-module-system/national-motion-system-start/src/main/resources/application-dev.yml

@@ -167,6 +167,8 @@ spring:
     host: 47.109.67.112
     port: 6379
     password: RUw3C4tAF0aE4PVC
+    redisson:
+      file: classpath:redisson.yml
 #mybatis plus 设置
 mybatis-plus:
   mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml
@@ -277,11 +279,11 @@ jeecg:
     logPath: logs/jeecg/job/jobhandler/
     logRetentionDays: 30
   #分布式锁配置
-  redisson:
-    address: 127.0.0.1:6379
-    password:
-    type: STANDALONE
-    enabled: true
+#  redisson:
+#    address: 127.0.0.1:6379
+#    password:
+#    type: STANDALONE
+#    enabled: true
   # 百度开放API配置
   baidu-api:
     app-id: ??

+ 20 - 0
national-motion-module-system/national-motion-system-start/src/main/resources/redisson.yml

@@ -0,0 +1,20 @@
+singleServerConfig:
+  idleConnectionTimeout: 10000
+  connectTimeout: 10000
+  timeout: 3000
+  retryAttempts: 3
+  retryInterval: 1500
+  password: RUw3C4tAF0aE4PVC
+  subscriptionsPerConnection: 5
+  clientName: null
+  address: "redis://47.109.67.112:6379"
+  subscriptionConnectionMinimumIdleSize: 1
+  subscriptionConnectionPoolSize: 50
+  connectionMinimumIdleSize: 32
+  connectionPoolSize: 64
+  database: 1
+  dnsMonitoringInterval: 5000
+threads: 0
+nettyThreads: 0
+codec: !<org.redisson.codec.JsonJacksonCodec> {}
+transportMode: "NIO"

+ 2 - 2
pom.xml

@@ -75,7 +75,7 @@
 
 		<httpclient.version>4.5.13</httpclient.version>
 		<gson.version>2.10</gson.version>
-		<redission.version>3.17.6</redission.version>
+		<redission.version>3.48.0</redission.version>
 		<wechatpay.version>0.4.7</wechatpay.version>
 	</properties>
 	<modules>
@@ -232,7 +232,7 @@
 
 			<dependency>
 				<groupId>org.redisson</groupId>
-				<artifactId>redisson-spring-boot-starter</artifactId>
+				<artifactId>redisson</artifactId>
 				<version>${redission.version}</version>
 			</dependency>