From 49c9bdbf32bad36c41b6b7cdd37e104d94ec7a5c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
 <15040126243@163.com>
Date: Wed, 15 Feb 2023 11:53:33 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E9=87=8D=E6=9E=84=20OssFactory=20?=
 =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=96=B9=E5=BC=8F=20=E6=94=B9=E4=B8=BA?=
 =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E6=AF=94=E5=AF=B9=E9=85=8D=E7=BD=AE=E5=81=9A?=
 =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/ruoyi/common/oss/core/OssClient.java  | 13 ++++++
 .../ruoyi/common/oss/factory/OssFactory.java  | 42 ++++++-------------
 .../service/impl/SysOssConfigServiceImpl.java | 23 ++--------
 3 files changed, 29 insertions(+), 49 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java
index 14271905..c290c2a6 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java
@@ -183,6 +183,12 @@ public class OssClient {
         return configKey;
     }
 
+    /**
+     * 获取私有URL链接
+     *
+     * @param objectKey 对象KEY
+     * @param second    授权时间
+     */
     public String getPrivateUrl(String objectKey, Integer second) {
         GeneratePresignedUrlRequest generatePresignedUrlRequest =
             new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey)
@@ -192,6 +198,13 @@ public class OssClient {
         return url.toString();
     }
 
+    /**
+     * 检查配置是否相同
+     */
+    public boolean checkPropertiesSame(OssProperties properties) {
+        return this.properties.equals(properties);
+    }
+
     /**
      * 获取当前桶权限类型
      *
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java
index a47e9495..232a6c9c 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java
@@ -24,21 +24,6 @@ public class OssFactory {
 
     private static final Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
 
-    /**
-     * 初始化工厂
-     */
-    public static void init() {
-        log.info("初始化OSS工厂");
-        RedisUtils.subscribe(OssConstant.DEFAULT_CONFIG_KEY, String.class, configKey -> {
-            OssClient client = getClient(configKey);
-            // 未初始化不处理
-            if (client != null) {
-                refresh(configKey);
-                log.info("订阅刷新OSS配置 => " + configKey);
-            }
-        });
-    }
-
     /**
      * 获取默认实例
      */
@@ -55,25 +40,24 @@ public class OssFactory {
      * 根据类型获取实例
      */
     public static OssClient instance(String configKey) {
-        OssClient client = getClient(configKey);
-        if (client == null) {
-            refresh(configKey);
-            return getClient(configKey);
-        }
-        return client;
-    }
-
-    private static void refresh(String configKey) {
         String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
         if (json == null) {
             throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
         }
         OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
-        CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
-    }
-
-    private static OssClient getClient(String configKey) {
-        return CLIENT_CACHE.get(configKey);
+        OssClient client = CLIENT_CACHE.get(configKey);
+        if (client == null) {
+            CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
+            log.info("创建OSS实例 key => {}", configKey);
+            return CLIENT_CACHE.get(configKey);
+        }
+        // 配置不相同则重新构建
+        if (!client.checkPropertiesSame(properties)) {
+            CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
+            log.info("重载OSS实例 key => {}", configKey);
+            return CLIENT_CACHE.get(configKey);
+        }
+        return client;
     }
 
 }
diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java
index d64635c4..2f5315de 100644
--- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java
+++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java
@@ -11,12 +11,10 @@ import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.JsonUtils;
-import com.ruoyi.common.core.utils.SpringUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
 import com.ruoyi.common.oss.constant.OssConstant;
-import com.ruoyi.common.oss.factory.OssFactory;
 import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.common.redis.utils.RedisUtils;
 import com.ruoyi.resource.domain.SysOssConfig;
@@ -26,7 +24,6 @@ import com.ruoyi.resource.mapper.SysOssConfigMapper;
 import com.ruoyi.resource.service.ISysOssConfigService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -59,10 +56,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
             if ("0".equals(config.getStatus())) {
                 RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey);
             }
-            SpringUtils.context().publishEvent(config);
+            CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
         }
-        // 初始化OSS工厂
-        OssFactory.init();
     }
 
     @Override
@@ -92,7 +87,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
         validEntityBeforeSave(config);
         boolean flag = baseMapper.insert(config) > 0;
         if (flag) {
-            SpringUtils.context().publishEvent(config);
+            CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
         }
         return flag;
     }
@@ -109,7 +104,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
         luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId());
         boolean flag = baseMapper.update(config, luw) > 0;
         if (flag) {
-            SpringUtils.context().publishEvent(config);
+            CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
         }
         return flag;
     }
@@ -174,16 +169,4 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
         return row;
     }
 
-    /**
-     * 更新配置缓存
-     *
-     * @param config 配置
-     */
-    @EventListener
-    public void updateConfigCache(SysOssConfig config) {
-        CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
-        RedisUtils.publish(OssConstant.DEFAULT_CONFIG_KEY, config.getConfigKey(), msg -> {
-            log.info("发布刷新OSS配置 => " + msg);
-        });
-    }
 }