From 2d6c306ae113a7dd549a8e415ca075b754470dfc Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 03 九月 2021 17:42:58 +0800
Subject: [PATCH] update 优化 oss配置 使用发布订阅工具 刷新配置
---
ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java | 30 +++++++++++++++---------------
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java | 4 ++--
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java | 5 +++++
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java | 2 +-
4 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
index 0019761..8e68d3c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -31,7 +31,7 @@
* @param msg 鍙戦�佹暟鎹�
* @param consumer 鑷畾涔夊鐞�
*/
- public <T> void publish(String channelKey, T msg, Consumer consumer) {
+ public <T> void publish(String channelKey, T msg, Consumer<T> consumer) {
RTopic topic = redissonClient.getTopic(channelKey);
topic.publish(msg);
consumer.accept(msg);
@@ -49,7 +49,7 @@
* @param clazz 娑堟伅绫诲瀷
* @param consumer 鑷畾涔夊鐞�
*/
- public <T> void subscribe(String channelKey, Class<T> clazz, Consumer consumer) {
+ public <T> void subscribe(String channelKey, Class<T> clazz, Consumer<T> consumer) {
RTopic topic = redissonClient.getTopic(channelKey);
topic.addListener(clazz, (channel, msg) -> consumer.accept(msg));
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
index a9144b4..d49d6ee 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
@@ -36,7 +36,7 @@
@GetMapping("/sub")
public AjaxResult<Void> sub(String key){
redisCache.subscribe(key, String.class, msg -> {
- System.out.println("璁㈤槄閫氶亾 => " + key + ", 鎺ユ敹鍊� => " + msg.toString());
+ System.out.println("璁㈤槄閫氶亾 => " + key + ", 鎺ユ敹鍊� => " + msg);
});
return AjaxResult.success("鎿嶄綔鎴愬姛");
}
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 accbbcd..7a22c50 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
@@ -12,8 +12,8 @@
import com.ruoyi.oss.properties.CloudStorageProperties;
import com.ruoyi.oss.service.ICloudStorageStrategy;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import lombok.extern.slf4j.Slf4j;
-import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -22,23 +22,23 @@
*
* @author Lion Li
*/
+@Slf4j
public class OssFactory {
private static RedisCache redisCache;
static {
OssFactory.redisCache = SpringUtils.getBean(RedisCache.class);
+ redisCache.subscribe(CloudConstant.CACHE_CONFIG_KEY, String.class, msg -> {
+ refreshService(msg);
+ log.info("璁㈤槄鍒锋柊OSS閰嶇疆 => " + msg);
+ });
}
/**
* 鏈嶅姟瀹炰緥缂撳瓨
*/
private static final Map<String, ICloudStorageStrategy> SERVICES = new ConcurrentHashMap<>();
-
- /**
- * 鏈嶅姟閰嶇疆鏇存柊鏃堕棿缂撳瓨
- */
- private static final Map<String, Date> SERVICES_UPDATE_TIME = new ConcurrentHashMap<>();
/**
* 鑾峰彇榛樿瀹炰緥
@@ -57,23 +57,23 @@
*/
public static ICloudStorageStrategy instance(String type) {
ICloudStorageStrategy service = SERVICES.get(type);
- Date oldDate = SERVICES_UPDATE_TIME.get(type);
+ if (service == null) {
+ refreshService(type);
+ service = SERVICES.get(type);
+ }
+ return service;
+ }
+
+ private static void refreshService(String type) {
Object json = redisCache.getCacheObject(CloudConstant.SYS_OSS_KEY + type);
CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class);
if (properties == null) {
throw new OssException("绯荤粺寮傚父, '" + type + "'閰嶇疆淇℃伅涓嶅瓨鍦�!");
}
- Date nowDate = properties.getUpdateTime();
- // 鏈嶅姟瀛樺湪骞舵洿鏂版椂闂寸浉鍚屽垯杩斿洖(浣跨敤鏇存柊鏃堕棿纭繚閰嶇疆鏈�缁堜竴鑷存��)
- if (service != null && oldDate.equals(nowDate)) {
- return service;
- }
// 鑾峰彇redis閰嶇疆淇℃伅 鍒涘缓瀵硅薄 骞剁紦瀛�
- service = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type));
+ ICloudStorageStrategy service = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type));
((AbstractCloudStorageStrategy)service).init(properties);
SERVICES.put(type, service);
- SERVICES_UPDATE_TIME.put(type, nowDate);
- return service;
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
index 5a6e8de..b3a92c0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
@@ -21,6 +21,7 @@
import com.ruoyi.system.mapper.SysOssConfigMapper;
import com.ruoyi.system.service.ISysOssConfigService;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -36,6 +37,7 @@
* @author 瀛よ垷鐑熼洦
* @date 2021-08-13
*/
+@Slf4j
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@Service
public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper, SysOssConfig, SysOssConfigVo> implements ISysOssConfigService {
@@ -169,6 +171,9 @@
redisCache.setCacheObject(
getCacheKey(config.getConfigKey()),
JsonUtils.toJsonString(config));
+ redisCache.publish(CloudConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> {
+ log.info("鍙戝竷鍒锋柊OSS閰嶇疆 => " + msg);
+ });
}
return flag;
}
--
Gitblit v1.9.3