瀏覽代碼

工具类加锁保证线程安全

xucaiqin 2 年之前
父節點
當前提交
17cdc03af2

+ 10 - 10
iot-framework/iot-common/src/main/java/com/middle/platform/common/utils/OrderUtil.java

@@ -11,6 +11,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
 
 /**
  * @author xucaiqin
@@ -28,6 +29,7 @@ public class OrderUtil {
                     return 1L;
                 }
             });
+    private static final ReentrantLock lock = new ReentrantLock();
 
     /**
      * 流水号
@@ -38,9 +40,14 @@ public class OrderUtil {
     @SneakyThrows
     public static String get(String prefix) {
         String key = prefix + getYMD();
-        Long aLong = cache.get(key);
-        Optional.of(aLong).ifPresent(v -> cache.put(key, v + 1));
-        return key + String.format("%05d", aLong);
+        lock.lock();
+        try {
+            Long aLong = cache.get(key);
+            Optional.of(aLong).ifPresent(v -> cache.put(key, v + 1));
+            return key + String.format("%05d", aLong);
+        } finally {
+            lock.unlock();
+        }
     }
 
 
@@ -48,11 +55,4 @@ public class OrderUtil {
         return LocalDateTimeUtil.format(LocalDate.now(), DateTimeFormatter.ofPattern(ymd));
     }
 
-    public static void main(String[] args) {
-        for (int i = 0; i < 10; i++) {
-            System.out.println(get("PRO01"));
-        }
-    }
-
-
 }

+ 2 - 1
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/MqttTopicInit.java

@@ -1,5 +1,6 @@
 package com.middle.platform.data.biz.service.mqtt;
 
+import com.alibaba.fastjson.JSONObject;
 import com.middle.platform.data.biz.service.mqtt.impl.DynamicTopic;
 import com.middle.platform.manage.api.feign.ProductApi;
 import com.middle.platform.manage.api.pojo.TopicVo;
@@ -28,7 +29,7 @@ public class MqttTopicInit {
         List<TopicVo> topicVos = productApi.productTopic();
 
         if (!CollectionUtils.isEmpty(topicVos)) {
-            log.info("初始化订阅:{}", topicVos);
+            log.info("初始化订阅:{}", JSONObject.toJSONString(topicVos));
             Map<String, Object> map = topicVos.stream().collect(Collectors.toMap(a -> String.format(CacheConstant.TOPIC_CACHE, a.getUrl()), b -> b.getFunc() + String.valueOf(b.getPermission()), (a, b) -> a));
             cacheService.multiSetKey(map);
             dynamicTopic.addTopic(topicVos.stream().map(TopicVo::getUrl).collect(Collectors.toList()));