소스 검색

fix 修复 OssClient 实例多租户相同key缓存覆盖问题

疯狂的狮子li 1 년 전
부모
커밋
8d69be093e

+ 5 - 3
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java

@@ -45,15 +45,17 @@ public class OssFactory {
             throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
         }
         OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
-        OssClient client = CLIENT_CACHE.get(configKey);
+        // 使用租户标识避免多个租户相同key实例覆盖
+        String key = properties.getTenantId() + ":" + configKey;
+        OssClient client = CLIENT_CACHE.get(key);
         if (client == null) {
-            CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
+            CLIENT_CACHE.put(key, 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));
+            CLIENT_CACHE.put(key, new OssClient(configKey, properties));
             log.info("重载OSS实例 key => {}", configKey);
             return CLIENT_CACHE.get(configKey);
         }

+ 5 - 0
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/properties/OssProperties.java

@@ -10,6 +10,11 @@ import lombok.Data;
 @Data
 public class OssProperties {
 
+    /**
+     * 租户id
+     */
+    private String tenantId;
+
     /**
      * 访问站点
      */