Jelajahi Sumber

aws 冻结解冻

dsx 2 tahun lalu
induk
melakukan
6d89f03dee

+ 26 - 4
4dkankan-utils-fyun-s3/src/main/java/com/fdkankan/fyun/s3/S3FileService.java

@@ -16,9 +16,7 @@ import org.springframework.util.ObjectUtils;
 
 import java.io.*;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Component
@@ -386,12 +384,36 @@ public class S3FileService extends AbstractFYunFileService {
 
     @Override
     public Boolean checkStore(String bucket, String url) {
-        return null;
+        ObjectMetadata objectMetadata =  s3.getObjectMetadata(bucket, url);
+        return !isRestoreCompleted(objectMetadata);
+    }
+
+    private boolean isRestoreCompleted(ObjectMetadata objectMetadata){
+        Date restoreExpirationTime = objectMetadata.getRestoreExpirationTime();
+        if(Objects.nonNull(restoreExpirationTime) && restoreExpirationTime.after(Calendar.getInstance().getTime())){
+            return true;
+        }
+        return false;
     }
 
     @Override
     public void restoreFolder(String bucket, String url) {
+        ObjectMetadata objectMetadata ;
 
+        List<String> objectList = this.listRemoteFiles(bucket, url);
+        if(CollUtil.isEmpty(objectList)){
+            return;
+        }
+        for (String objectName : objectList) {
+            objectMetadata = s3.getObjectMetadata(bucket, objectName);
+            // 校验Object是否为归档类型Object。
+            StorageClass storageClass = objectMetadata.getArchiveStatus();
+            if (storageClass == StorageClass.) {
+                // 解冻Object。
+                RestoreObjectRequest requestRestore = new RestoreObjectRequest(bucket, url, 1);
+                s3.restoreObjectV2(requestRestore);
+            }
+        }
     }
 
     @Override

+ 7 - 0
4dkankan-utils-redis/pom.xml

@@ -44,6 +44,13 @@
             <artifactId>redisson</artifactId>
             <version>3.8.2</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.16.6</version>
+        </dependency>
+
     </dependencies>
 
 

+ 60 - 0
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/util/RedissonLock.java

@@ -0,0 +1,60 @@
+package com.fdkankan.redis.util;
+
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * 分布式Redis锁
+ */
+@Slf4j
+@Component
+public class RedissonLock {
+
+    @Autowired
+    private RedissonClient redissonClient;
+
+    // 加锁
+    public Boolean lock(String lockName) {
+        if (redissonClient == null) {
+            log.info("DistributedRedisLock redissonClient is null");
+            return false;
+        }
+
+        try {
+            RLock lock = redissonClient.getLock(lockName);
+            // 锁15秒后自动释放,防止死锁
+            lock.lock(15, TimeUnit.SECONDS);
+
+            log.info("Thread [{}] DistributedRedisLock lock [{}] success", Thread.currentThread().getName(), lockName);
+            // 加锁成功
+            return true;
+        } catch (Exception e) {
+            log.error("DistributedRedisLock lock [{}] Exception:", lockName, e);
+            return false;
+        }
+    }
+
+    // 释放锁
+    public Boolean unlock(String lockName) {
+        if (redissonClient == null) {
+            log.info("DistributedRedisLock redissonClient is null");
+            return false;
+        }
+
+        try {
+            RLock lock = redissonClient.getLock(lockName);
+            lock.unlock();
+            log.info("Thread [{}] DistributedRedisLock unlock [{}] success", Thread.currentThread().getName(), lockName);
+            // 释放锁成功
+            return true;
+        } catch (Exception e) {
+            log.error("DistributedRedisLock unlock [{}] Exception:", lockName, e);
+            return false;
+        }
+    }
+}