update 重构 OssFactory 加载方式 改为每次比对配置做实例更新
This commit is contained in:
parent
d93307151a
commit
4382cf2217
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前桶权限类型
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
OssClient client = CLIENT_CACHE.get(configKey);
|
||||
if (client == null) {
|
||||
CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
|
||||
}
|
||||
|
||||
private static OssClient getClient(String configKey) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,9 +16,7 @@ import com.ruoyi.common.utils.JsonUtils;
|
|||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.redis.CacheUtils;
|
||||
import com.ruoyi.common.utils.redis.RedisUtils;
|
||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||
import com.ruoyi.oss.constant.OssConstant;
|
||||
import com.ruoyi.oss.factory.OssFactory;
|
||||
import com.ruoyi.system.domain.SysOssConfig;
|
||||
import com.ruoyi.system.domain.bo.SysOssConfigBo;
|
||||
import com.ruoyi.system.domain.vo.SysOssConfigVo;
|
||||
|
@ -26,7 +24,6 @@ import com.ruoyi.system.mapper.SysOssConfigMapper;
|
|||
import com.ruoyi.system.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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue