From ad18449753e6db2e1fdd620ea4796b8e98afad1e Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期一, 24 一月 2022 13:00:38 +0800 Subject: [PATCH] update 重构 使用 Spring 简化 oss 模块代码 --- ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java | 11 ++- ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java | 4 + ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java | 11 ++- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java | 2 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java | 21 +----- ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java | 42 ++++++------- ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java | 20 +++--- ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java | 8 ++ ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java | 13 +++- 9 files changed, 69 insertions(+), 63 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java index 57f232a..e16a673 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java @@ -1,6 +1,5 @@ package com.ruoyi.oss.enumd; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.service.impl.AliyunOssStrategy; import com.ruoyi.oss.service.impl.MinioOssStrategy; import com.ruoyi.oss.service.impl.QcloudOssStrategy; @@ -39,25 +38,15 @@ private final String value; - private final Class<?> serviceClass; + private final Class<?> beanClass; - public static Class<?> getServiceClass(String value) { - for (OssEnumd clazz : values()) { - if (clazz.getValue().equals(value)) { - return clazz.getServiceClass(); + public static OssEnumd find(String value) { + for (OssEnumd enumd : values()) { + if (enumd.getValue().equals(value)) { + return enumd; } } return null; } - - public static String getServiceName(String value) { - for (OssEnumd clazz : values()) { - if (clazz.getValue().equals(value)) { - return StringUtils.uncapitalize(clazz.getServiceClass().getSimpleName()); - } - } - return null; - } - } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java index 0107955..9ac887e 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java @@ -3,7 +3,7 @@ import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.redis.RedisUtils; -import com.ruoyi.common.utils.reflect.ReflectUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.oss.constant.OssConstant; import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; @@ -11,9 +11,6 @@ import com.ruoyi.oss.service.IOssStrategy; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import lombok.extern.slf4j.Slf4j; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * 鏂囦欢涓婁紶Factory @@ -24,19 +21,15 @@ public class OssFactory { /** - * 鏈嶅姟瀹炰緥缂撳瓨 - */ - private static final Map<String, IOssStrategy> SERVICES = new ConcurrentHashMap<>(); - - /** * 鍒濆鍖栧伐鍘� */ public static void init() { log.info("鍒濆鍖朞SS宸ュ巶"); RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, type -> { - // 娌℃湁鐨勫疄渚嬩笉澶勭悊 - if (SERVICES.containsKey(type)) { - refreshService(type); + AbstractOssStrategy strategy = getStrategy(type); + // 鏈垵濮嬪寲涓嶅鐞� + if (strategy.isInit) { + refresh(type); log.info("璁㈤槄鍒锋柊OSS閰嶇疆 => " + type); } }); @@ -58,24 +51,29 @@ * 鏍规嵁绫诲瀷鑾峰彇瀹炰緥 */ public static IOssStrategy instance(String type) { - IOssStrategy service = SERVICES.get(type); - if (service == null) { - refreshService(type); - service = SERVICES.get(type); + OssEnumd enumd = OssEnumd.find(type); + if (enumd == null) { + throw new OssException("鏂囦欢瀛樺偍鏈嶅姟绫诲瀷鏃犳硶鎵惧埌!"); } - return service; + AbstractOssStrategy strategy = getStrategy(type); + if (!strategy.isInit) { + refresh(type); + } + return strategy; } - private static void refreshService(String type) { + private static void refresh(String type) { Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + type); OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class); if (properties == null) { throw new OssException("绯荤粺寮傚父, '" + type + "'閰嶇疆淇℃伅涓嶅瓨鍦�!"); } - // 鑾峰彇redis閰嶇疆淇℃伅 鍒涘缓瀵硅薄 骞剁紦瀛� - IOssStrategy service = (IOssStrategy) ReflectUtils.newInstance(OssEnumd.getServiceClass(type)); - ((AbstractOssStrategy) service).init(properties); - SERVICES.put(type, service); + getStrategy(type).init(properties); + } + + private static AbstractOssStrategy getStrategy(String type) { + OssEnumd enumd = OssEnumd.find(type); + return (AbstractOssStrategy) SpringUtils.getBean(enumd.getBeanClass()); } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java index 2a8ef4e..c6661e7 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java @@ -1,6 +1,7 @@ package com.ruoyi.oss.service; import com.ruoyi.oss.entity.UploadResult; +import com.ruoyi.oss.enumd.OssEnumd; import java.io.InputStream; @@ -15,8 +16,9 @@ /** * 鑾峰彇鏈嶅姟鍟嗙被鍨� + * @return */ - String getServiceType(); + OssEnumd getServiceType(); /** * 鏂囦欢涓婁紶 diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java index 6ad4f12..e4928cd 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java @@ -5,6 +5,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.service.IOssStrategy; @@ -18,14 +19,17 @@ public abstract class AbstractOssStrategy implements IOssStrategy { protected OssProperties properties; + public boolean isInit = false; - public abstract void init(OssProperties properties); + public void init(OssProperties properties) { + this.properties = properties; + } @Override public abstract void createBucket(); @Override - public abstract String getServiceType(); + public abstract OssEnumd getServiceType(); public String getPath(String prefix, String suffix) { // 鐢熸垚uuid diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java index 70672d4..61b98cd 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java @@ -13,6 +13,7 @@ import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; +import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -22,13 +23,14 @@ * * @author Lion Li */ +@Component public class AliyunOssStrategy extends AbstractOssStrategy { private OSSClient client; @Override - public void init(OssProperties cloudStorageProperties) { - properties = cloudStorageProperties; + public void init(OssProperties ossProperties) { + super.init(ossProperties); try { ClientConfiguration configuration = new ClientConfiguration(); DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider( @@ -38,6 +40,7 @@ } catch (Exception e) { throw new OssException("闃块噷浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]"); } + isInit = true; } @Override @@ -56,8 +59,8 @@ } @Override - public String getServiceType() { - return OssEnumd.ALIYUN.getValue(); + public OssEnumd getServiceType() { + return OssEnumd.ALIYUN; } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java index 60ac032..e2cd578 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java @@ -9,6 +9,7 @@ import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import io.minio.*; import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -18,13 +19,14 @@ * * @author Lion Li */ +@Component public class MinioOssStrategy extends AbstractOssStrategy { private MinioClient minioClient; @Override - public void init(OssProperties cloudStorageProperties) { - properties = cloudStorageProperties; + public void init(OssProperties ossProperties) { + super.init(ossProperties); try { minioClient = MinioClient.builder() .endpoint(properties.getEndpoint()) @@ -34,6 +36,7 @@ } catch (Exception e) { throw new OssException("Minio瀛樺偍閰嶇疆閿欒! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]"); } + isInit = true; } @Override @@ -56,8 +59,8 @@ } @Override - public String getServiceType() { - return OssEnumd.MINIO.getValue(); + public OssEnumd getServiceType() { + return OssEnumd.MINIO; } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java index 5f59db2..bc11848 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java @@ -11,8 +11,11 @@ import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; +import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -22,13 +25,14 @@ * * @author Lion Li */ +@Component public class QcloudOssStrategy extends AbstractOssStrategy { private COSClient client; @Override - public void init(OssProperties cloudStorageProperties) { - properties = cloudStorageProperties; + public void init(OssProperties ossProperties) { + super.init(ossProperties); try { COSCredentials credentials = new BasicCOSCredentials( properties.getAccessKey(), properties.getSecretKey()); @@ -46,6 +50,7 @@ } catch (Exception e) { throw new OssException("鑵捐浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]"); } + isInit = true; } @Override @@ -64,8 +69,8 @@ } @Override - public String getServiceType() { - return OssEnumd.QCLOUD.getValue(); + public OssEnumd getServiceType() { + return OssEnumd.QCLOUD; } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java index 23c6648..417f703 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java @@ -10,8 +10,11 @@ import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; +import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; import java.io.InputStream; @@ -20,15 +23,17 @@ * * @author Lion Li */ +@Component public class QiniuOssStrategy extends AbstractOssStrategy { private UploadManager uploadManager; private BucketManager bucketManager; private Auth auth; + @Override - public void init(OssProperties cloudStorageProperties) { - properties = cloudStorageProperties; + public void init(OssProperties ossProperties) { + super.init(ossProperties); try { Configuration config = new Configuration(getRegion(properties.getRegion())); // https璁剧疆 @@ -36,15 +41,12 @@ config.useHttpsDomains = "Y".equals(properties.getIsHttps()); uploadManager = new UploadManager(config); auth = Auth.create(properties.getAccessKey(), properties.getSecretKey()); - String bucketName = properties.getBucketName(); bucketManager = new BucketManager(auth, config); - - if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) { - bucketManager.createBucket(bucketName, properties.getRegion()); - } + createBucket(); } catch (Exception e) { throw new OssException("涓冪墰浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]"); } + isInit = true; } @Override @@ -61,8 +63,8 @@ } @Override - public String getServiceType() { - return OssEnumd.QINIU.getValue(); + public OssEnumd getServiceType() { + return OssEnumd.QINIU; } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index b181ff8..5a28086 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -78,7 +78,7 @@ .setFileSuffix(suffix) .setFileName(uploadResult.getFilename()) .setOriginalName(originalfileName) - .setService(storage.getServiceType()); + .setService(storage.getServiceType().getValue()); baseMapper.insert(oss); return oss; } -- Gitblit v1.9.3