feat: 存储微服务优化

This commit is contained in:
landaiqing
2024-05-15 17:51:28 +08:00
parent a522e11872
commit e3113f79e9
10 changed files with 385 additions and 215 deletions

View File

@@ -0,0 +1,37 @@
package com.schisandra.oss.application.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
/**
* @Classname GlobalConfig
* @BelongsProject: schisandra-cloud-storage
* @BelongsPackage: com.schisandra.auth.application.config
* @Author: schisandra
* @CreateTime: 2024-02-16 15:57
* @Description: MVC全局处理
* @Version: 1.0
*/
@Configuration
public class GlobalConfig extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(mappingJackson2HttpMessageConverter());
}
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
return converter;
}
}

View File

@@ -5,13 +5,12 @@ import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssAliDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssAliDTO;
import com.schisandra.oss.application.oss.core.ali.AliOssConfiguration;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.service.SchisandraOssAliDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -22,12 +21,28 @@ import javax.annotation.Resource;
* @since 2024-05-14 20:45:32
*/
@RestController
@RequestMapping("/oss/")
@RequestMapping("/oss/ali/")
@Slf4j
public class SchisandraOssAliController {
@Resource
private SchisandraOssAliDomainService schisandraOssAliDomainService;
@Resource
private AliOssConfiguration aliOssConfiguration;
@GetMapping("init")
public void init(@RequestParam String userId){
if (log.isInfoEnabled()) {
log.info("SchisandraOssAliController.init.userId:{}", userId);
}
Preconditions.checkNotNull(userId, "用户id不能为空");
try {
aliOssConfiguration.aliOssClient(userId);
log.info("用户: " + userId + "-> ali oss 初始化完成!");
} catch (Exception e) {
log.error("用户: " + userId + "-> ali oss 初始化失败!", e.getMessage(), e);
}
}
/**
* 新增
@@ -39,56 +54,7 @@ public class SchisandraOssAliController {
if (log.isInfoEnabled()) {
log.info("SchisandraOssAliController.add.dto:{}", JSON.toJSONString(schisandraOssAliDTO));
}
Preconditions.checkNotNull(schisandraOssAliDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getEndpoint(), "OSS地址不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeyId(), "AccessKey ID不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeySecret(), "AccessKey Secret不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSecurityToken(), "security Token不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBucketName(), "Bucket名称不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBasePath(), "数据存储路径不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserAgent(), "用户代理指HTTP的User-Agent头。默认为aliyun-sdk-java。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxErrorRetry(), "请求失败后最大的重试次数。默认3次。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionRequestTimeout(), "从连接池中获取连接的超时时间(单位:毫秒)。默认不超时。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTimeout(), "建立连接的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSocketTimeout(), "Socket层传输数据的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxConnections(), "允许打开的最大HTTP连接数。默认为1024不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTTL(), "连接TTL (生存时间)。Http连接由连接管理器用TTL缓存。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseReaper(), "是否使用com.aliyun.oss.common.comm.IdleConnectionReaper管理过期连接,默认开启不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIdleConnectionTime(), "连接空闲超时时间超时则关闭连接单位毫秒。默认为60000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProtocol(), "连接OSS所采用的协议HTTP或HTTPS默认为HTTP。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyHost(), "代理服务器主机地址。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPort(), "代理服务器端口。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyUsername(), "代理服务器验证的用户名。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPassword(), "代理服务器验证的密码。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyDomain(), "代理服务器的域该域可以执行NTLM认证不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyWorkstation(), "代理主机的NTLM身份验证服务器不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSupportCname(), "是否支持CNAME作为Endpoint默认支持CNAME。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCnameExcludeList(), "设置不可变排除的CName列表 ---- 任何以该列表中的项目结尾的域都不会进行Cname解析。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSldEnabled(), "是否开启二级域名Second Level Domain的访问方式默认不开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeout(), "请求超时时间单位毫秒。默认情况下是5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeoutEnabled(), "是否启用请求超时校验。默认情况下,它是禁用的。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSlowRequestsThreshold(), "设置慢请求的延迟阈值。如果请求的延迟大于延迟则将记录该请求。默认情况下阈值为5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getDefaultHeaders(), "设置默认的http头。所有请求头将自动添加到每个请求中。如果在请求中也指定了相同的请求头则默认的标头将被覆盖。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCrcCheckEnabled(), "是否在上传和下载时启用CRC校验默认启用不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSignatureVersion(), "所有请求设置签名版本不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTickOffset(), "设置OSS服务端时间和本地时间之间的差异以毫秒为单位。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRedirectEnable(), "是否开启HTTP重定向。 说明: Java SDK 3.10.1及以上版本支持设置是否开启HTTP重定向默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getVerifySSLEnable(), "是否开启SSL证书校验。 * 说明: Java SDK 3.10.1及以上版本支持设置是否开启SSL证书校验默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getLogConnectionPoolStats(), "是否开启日志记录连接池统计信息不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseSystemPropertyValues(), "是否使用系统属性值不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
parameterCheck(schisandraOssAliDTO);
SchisandraOssAliBO SchisandraOssAliBO = SchisandraOssAliDTOConverter.INSTANCE.convertDTOToBO(schisandraOssAliDTO);
return Result.ok(schisandraOssAliDomainService.add(SchisandraOssAliBO));
} catch (Exception e) {
@@ -98,6 +64,8 @@ public class SchisandraOssAliController {
}
/**
* 修改
*/
@@ -108,56 +76,7 @@ public class SchisandraOssAliController {
if (log.isInfoEnabled()) {
log.info("SchisandraOssAliController.update.dto:{}", JSON.toJSONString(schisandraOssAliDTO));
}
Preconditions.checkNotNull(schisandraOssAliDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getEndpoint(), "OSS地址不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeyId(), "AccessKey ID不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeySecret(), "AccessKey Secret不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSecurityToken(), "security Token不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBucketName(), "Bucket名称不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBasePath(), "数据存储路径不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserAgent(), "用户代理指HTTP的User-Agent头。默认为aliyun-sdk-java。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxErrorRetry(), "请求失败后最大的重试次数。默认3次。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionRequestTimeout(), "从连接池中获取连接的超时时间(单位:毫秒)。默认不超时。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTimeout(), "建立连接的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSocketTimeout(), "Socket层传输数据的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxConnections(), "允许打开的最大HTTP连接数。默认为1024不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTTL(), "连接TTL (生存时间)。Http连接由连接管理器用TTL缓存。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseReaper(), "是否使用com.aliyun.oss.common.comm.IdleConnectionReaper管理过期连接,默认开启不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIdleConnectionTime(), "连接空闲超时时间超时则关闭连接单位毫秒。默认为60000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProtocol(), "连接OSS所采用的协议HTTP或HTTPS默认为HTTP。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyHost(), "代理服务器主机地址。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPort(), "代理服务器端口。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyUsername(), "代理服务器验证的用户名。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPassword(), "代理服务器验证的密码。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyDomain(), "代理服务器的域该域可以执行NTLM认证不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyWorkstation(), "代理主机的NTLM身份验证服务器不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSupportCname(), "是否支持CNAME作为Endpoint默认支持CNAME。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCnameExcludeList(), "设置不可变排除的CName列表 ---- 任何以该列表中的项目结尾的域都不会进行Cname解析。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSldEnabled(), "是否开启二级域名Second Level Domain的访问方式默认不开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeout(), "请求超时时间单位毫秒。默认情况下是5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeoutEnabled(), "是否启用请求超时校验。默认情况下,它是禁用的。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSlowRequestsThreshold(), "设置慢请求的延迟阈值。如果请求的延迟大于延迟则将记录该请求。默认情况下阈值为5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getDefaultHeaders(), "设置默认的http头。所有请求头将自动添加到每个请求中。如果在请求中也指定了相同的请求头则默认的标头将被覆盖。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCrcCheckEnabled(), "是否在上传和下载时启用CRC校验默认启用不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSignatureVersion(), "所有请求设置签名版本不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTickOffset(), "设置OSS服务端时间和本地时间之间的差异以毫秒为单位。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRedirectEnable(), "是否开启HTTP重定向。 说明: Java SDK 3.10.1及以上版本支持设置是否开启HTTP重定向默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getVerifySSLEnable(), "是否开启SSL证书校验。 说明: Java SDK 3.10.1及以上版本支持设置是否开启SSL证书校验默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getLogConnectionPoolStats(), "是否开启日志记录连接池统计信息不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseSystemPropertyValues(), "是否使用系统属性值不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
parameterCheck(schisandraOssAliDTO);
SchisandraOssAliBO schisandraOssAliBO = SchisandraOssAliDTOConverter.INSTANCE.convertDTOToBO(schisandraOssAliDTO);
return Result.ok(schisandraOssAliDomainService.update(schisandraOssAliBO));
} catch (Exception e) {
@@ -177,56 +96,7 @@ public class SchisandraOssAliController {
if (log.isInfoEnabled()) {
log.info("SchisandraOssAliController.delete.dto:{}", JSON.toJSONString(schisandraOssAliDTO));
}
Preconditions.checkNotNull(schisandraOssAliDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getEndpoint(), "OSS地址不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeyId(), "AccessKey ID不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeySecret(), "AccessKey Secret不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSecurityToken(), "security Token不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBucketName(), "Bucket名称不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBasePath(), "数据存储路径不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserAgent(), "用户代理指HTTP的User-Agent头。默认为aliyun-sdk-java。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxErrorRetry(), "请求失败后最大的重试次数。默认3次。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionRequestTimeout(), "从连接池中获取连接的超时时间(单位:毫秒)。默认不超时。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTimeout(), "建立连接的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSocketTimeout(), "Socket层传输数据的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxConnections(), "允许打开的最大HTTP连接数。默认为1024不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTTL(), "连接TTL (生存时间)。Http连接由连接管理器用TTL缓存。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseReaper(), "是否使用com.aliyun.oss.common.comm.IdleConnectionReaper管理过期连接,默认开启不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIdleConnectionTime(), "连接空闲超时时间超时则关闭连接单位毫秒。默认为60000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProtocol(), "连接OSS所采用的协议HTTP或HTTPS默认为HTTP。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyHost(), "代理服务器主机地址。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPort(), "代理服务器端口。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyUsername(), "代理服务器验证的用户名。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPassword(), "代理服务器验证的密码。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyDomain(), "代理服务器的域该域可以执行NTLM认证不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyWorkstation(), "代理主机的NTLM身份验证服务器不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSupportCname(), "是否支持CNAME作为Endpoint默认支持CNAME。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCnameExcludeList(), "设置不可变排除的CName列表 ---- 任何以该列表中的项目结尾的域都不会进行Cname解析。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSldEnabled(), "是否开启二级域名Second Level Domain的访问方式默认不开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeout(), "请求超时时间单位毫秒。默认情况下是5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeoutEnabled(), "是否启用请求超时校验。默认情况下,它是禁用的。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSlowRequestsThreshold(), "设置慢请求的延迟阈值。如果请求的延迟大于延迟则将记录该请求。默认情况下阈值为5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getDefaultHeaders(), "设置默认的http头。所有请求头将自动添加到每个请求中。如果在请求中也指定了相同的请求头则默认的标头将被覆盖。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCrcCheckEnabled(), "是否在上传和下载时启用CRC校验默认启用不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSignatureVersion(), "所有请求设置签名版本不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTickOffset(), "设置OSS服务端时间和本地时间之间的差异以毫秒为单位。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRedirectEnable(), "是否开启HTTP重定向。 说明: Java SDK 3.10.1及以上版本支持设置是否开启HTTP重定向默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getVerifySSLEnable(), "是否开启SSL证书校验。 说明: Java SDK 3.10.1及以上版本支持设置是否开启SSL证书校验默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getLogConnectionPoolStats(), "是否开启日志记录连接池统计信息不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseSystemPropertyValues(), "是否使用系统属性值不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
parameterCheck(schisandraOssAliDTO);
SchisandraOssAliBO schisandraOssAliBO = SchisandraOssAliDTOConverter.INSTANCE.convertDTOToBO(schisandraOssAliDTO);
return Result.ok(schisandraOssAliDomainService.delete(schisandraOssAliBO));
} catch (Exception e) {
@@ -236,4 +106,57 @@ public class SchisandraOssAliController {
}
private void parameterCheck(SchisandraOssAliDTO schisandraOssAliDTO) {
Preconditions.checkNotNull(schisandraOssAliDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getEndpoint(), "OSS地址不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeyId(), "AccessKey ID不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getAccessKeySecret(), "AccessKey Secret不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSecurityToken(), "security Token不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBucketName(), "Bucket名称不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getBasePath(), "数据存储路径不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUserAgent(), "用户代理指HTTP的User-Agent头。默认为aliyun-sdk-java。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxErrorRetry(), "请求失败后最大的重试次数。默认3次。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionRequestTimeout(), "从连接池中获取连接的超时时间(单位:毫秒)。默认不超时。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTimeout(), "建立连接的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSocketTimeout(), "Socket层传输数据的超时时间单位毫秒。默认为50000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getMaxConnections(), "允许打开的最大HTTP连接数。默认为1024不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getConnectionTTL(), "连接TTL (生存时间)。Http连接由连接管理器用TTL缓存。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseReaper(), "是否使用com.aliyun.oss.common.comm.IdleConnectionReaper管理过期连接,默认开启不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIdleConnectionTime(), "连接空闲超时时间超时则关闭连接单位毫秒。默认为60000毫秒。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProtocol(), "连接OSS所采用的协议HTTP或HTTPS默认为HTTP。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyHost(), "代理服务器主机地址。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPort(), "代理服务器端口。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyUsername(), "代理服务器验证的用户名。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyPassword(), "代理服务器验证的密码。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyDomain(), "代理服务器的域该域可以执行NTLM认证不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getProxyWorkstation(), "代理主机的NTLM身份验证服务器不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSupportCname(), "是否支持CNAME作为Endpoint默认支持CNAME。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCnameExcludeList(), "设置不可变排除的CName列表 ---- 任何以该列表中的项目结尾的域都不会进行Cname解析。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSldEnabled(), "是否开启二级域名Second Level Domain的访问方式默认不开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeout(), "请求超时时间单位毫秒。默认情况下是5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRequestTimeoutEnabled(), "是否启用请求超时校验。默认情况下,它是禁用的。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSlowRequestsThreshold(), "设置慢请求的延迟阈值。如果请求的延迟大于延迟则将记录该请求。默认情况下阈值为5分钟。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getDefaultHeaders(), "设置默认的http头。所有请求头将自动添加到每个请求中。如果在请求中也指定了相同的请求头则默认的标头将被覆盖。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCrcCheckEnabled(), "是否在上传和下载时启用CRC校验默认启用不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getSignatureVersion(), "所有请求设置签名版本不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTickOffset(), "设置OSS服务端时间和本地时间之间的差异以毫秒为单位。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getRedirectEnable(), "是否开启HTTP重定向。 说明: Java SDK 3.10.1及以上版本支持设置是否开启HTTP重定向默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getVerifySSLEnable(), "是否开启SSL证书校验。 * 说明: Java SDK 3.10.1及以上版本支持设置是否开启SSL证书校验默认开启。不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getLogConnectionPoolStats(), "是否开启日志记录连接池统计信息不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUseSystemPropertyValues(), "是否使用系统属性值不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssAliDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
}
}

View File

@@ -4,26 +4,15 @@ import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssMinioDTO;
import com.schisandra.oss.application.oss.core.StandardOssClient;
import com.schisandra.oss.application.oss.core.minio.MinioOssClient;
import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration;
import com.schisandra.oss.application.oss.core.minio.model.MinioOssClientConfig;
import com.schisandra.oss.application.oss.core.minio.model.MinioOssConfig;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssMinioBO;
import com.schisandra.oss.domain.service.SchisandraOssMinioDomainService;
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* controller
@@ -32,10 +21,10 @@ import java.util.concurrent.TimeUnit;
* @since 2024-05-14 19:47:04
*/
@RestController
@RequestMapping("/oss/")
@RequestMapping("/oss/minio/")
@Slf4j
public class SchisandraOssMinioController {
@Autowired
@Resource
MinioOssClient minioOssClient;
@Resource
@@ -43,16 +32,32 @@ public class SchisandraOssMinioController {
@Resource
MinioOssConfiguration minioOssConfiguration;
@PostMapping("initMinio")
public void initMinio() {
minioOssConfiguration.minioOssClient();
/**
* @description: minio 初始化
* @param: []
* @return: void
* @author: landaiqing
* @date: 2024/5/15 13:34
*/
@GetMapping("init")
public void initMinio(@RequestParam String userId) {
if (log.isInfoEnabled()) {
log.info("SchisandraOssMinioController.init.userId:{}", userId);
}
Preconditions.checkNotNull(userId, "用户id不能为空");
try {
minioOssConfiguration.minioOssClient(userId);
log.info("用户: " + userId + "-> minio 初始化完成!");
} catch (Exception e) {
log.error("用户: " + userId + "-> minio 初始化失败!", e.getMessage(), e);
}
}
/**
* 新增
*/
@RequestMapping("addMinio")
@RequestMapping("add")
public Result<Boolean> addMinioOss(@RequestBody SchisandraOssMinioDTO schisandraOssMinioDTO) {
try {
@@ -72,7 +77,7 @@ public class SchisandraOssMinioController {
/**
* 修改
*/
@RequestMapping("updateMinio")
@RequestMapping("update")
public Result<Boolean> updateMinioOss(@RequestBody SchisandraOssMinioDTO schisandraOssMinioDTO) {
try {
@@ -92,7 +97,7 @@ public class SchisandraOssMinioController {
/**
* 删除
*/
@RequestMapping("deleteMinio")
@RequestMapping("delete")
public Result<Boolean> deleteMinioOss(@RequestBody SchisandraOssMinioDTO schisandraOssMinioDTO) {
try {
@@ -109,8 +114,9 @@ public class SchisandraOssMinioController {
}
@RequestMapping("testMinio")
@RequestMapping("test")
public void test() {
System.out.println(minioOssClient);
System.out.println(minioOssClient.getBasePath());
}

View File

@@ -26,6 +26,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
@@ -43,6 +44,7 @@ import java.util.*;
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
@Component
public class AliOssClient implements StandardOssClient {
public static final String OSS_OBJECT_NAME = "oss";

View File

@@ -10,10 +10,12 @@ import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.comm.Protocol;
import com.schisandra.oss.application.convert.SchisandraOssAliDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssAliDTO;
import com.schisandra.oss.application.dto.SchisandraOssMinioDTO;
import com.schisandra.oss.application.oss.constant.OssConstant;
import com.schisandra.oss.application.oss.core.StandardOssClient;
import com.schisandra.oss.application.oss.core.ali.model.AliOssClientConfig;
import com.schisandra.oss.application.oss.core.ali.model.AliOssConfig;
import com.schisandra.oss.application.oss.core.minio.MinioOssClient;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.service.SchisandraOssAliDomainService;
import lombok.extern.slf4j.Slf4j;
@@ -25,68 +27,77 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
/**
* @author landaiqing
* @version AliOssConfiguration.java, v 1.1 2021/11/16 15:25 chenmin Exp $
* Created on 2021/11/16
*/
@Configuration
@Component
@Slf4j
public class AliOssConfiguration {
@Resource
SchisandraOssAliDomainService schisandraOssAliDomainService;
@Resource
AliOssClient aliOssClient;
@Bean
public StandardOssClient aliOssClient() {
SchisandraOssAliBO schisandraOssAliBO = schisandraOssAliDomainService.getAliOssConfig(1L);
SchisandraOssAliDTO schisandraOssAliDTO = SchisandraOssAliDTOConverter.INSTANCE.convertBOToDTO(schisandraOssAliBO);
if (ObjectUtils.isEmpty(schisandraOssAliDTO)) {
public StandardOssClient aliOssClient(String userId) {
CompletableFuture<SchisandraOssAliDTO> futurePrice = CompletableFuture.supplyAsync(() -> {
SchisandraOssAliBO schisandraOssAliBO = schisandraOssAliDomainService.getAliOssConfig(Long.valueOf(userId));
SchisandraOssAliDTO schisandraOssAliDTO = SchisandraOssAliDTOConverter.INSTANCE.convertBOToDTO(schisandraOssAliBO);
return schisandraOssAliDTO;
});
SchisandraOssAliDTO ali = futurePrice.join();
if (ObjectUtils.isEmpty(ali)) {
log.error("ali oss配置信息获取失败");
return null;
}
AliOssConfig aliOssConfig = new AliOssConfig();
aliOssConfig.setEndpoint(schisandraOssAliDTO.getEndpoint());
aliOssConfig.setAccessKeyId(schisandraOssAliDTO.getAccessKeyId());
aliOssConfig.setAccessKeySecret(schisandraOssAliDTO.getAccessKeySecret());
aliOssConfig.setSecurityToken(schisandraOssAliDTO.getSecurityToken());
if (Boolean.parseBoolean(schisandraOssAliDTO.getOpenAdvancedSetup())) {
aliOssConfig.setEndpoint(ali.getEndpoint());
aliOssConfig.setAccessKeyId(ali.getAccessKeyId());
aliOssConfig.setAccessKeySecret(ali.getAccessKeySecret());
aliOssConfig.setSecurityToken(ali.getSecurityToken());
if (Boolean.parseBoolean(ali.getOpenAdvancedSetup())) {
AliOssClientConfig aliOssClientConfig = new AliOssClientConfig();
aliOssClientConfig.setCnameExcludeList(Arrays.asList(Optional.ofNullable(schisandraOssAliDTO.getCnameExcludeList()).orElse("").split(",")));
aliOssClientConfig.setConnectionTimeout(schisandraOssAliDTO.getConnectionTimeout());
aliOssClientConfig.setConnectionTTL(schisandraOssAliDTO.getConnectionTTL());
aliOssClientConfig.setProtocol(Protocol.valueOf(schisandraOssAliDTO.getProtocol()));
aliOssClientConfig.setConnectionRequestTimeout(schisandraOssAliDTO.getConnectionRequestTimeout());
aliOssClientConfig.setMaxConnections(schisandraOssAliDTO.getMaxConnections());
aliOssClientConfig.setProxyPort(Integer.parseInt(schisandraOssAliDTO.getProxyPort()));
aliOssClientConfig.setProxyDomain(schisandraOssAliDTO.getProxyDomain());
aliOssClientConfig.setCrcCheckEnabled(Boolean.parseBoolean(schisandraOssAliDTO.getCrcCheckEnabled()));
aliOssClientConfig.setTickOffset(schisandraOssAliDTO.getTickOffset());
aliOssClientConfig.setProxyHost(schisandraOssAliDTO.getProxyHost());
aliOssClientConfig.setProxyPassword(schisandraOssAliDTO.getProxyPassword());
aliOssClientConfig.setProxyUsername(schisandraOssAliDTO.getProxyUsername());
aliOssClientConfig.setVerifySSLEnable(Boolean.parseBoolean(schisandraOssAliDTO.getVerifySSLEnable()));
aliOssClientConfig.setUseSystemPropertyValues(Boolean.parseBoolean(schisandraOssAliDTO.getUseSystemPropertyValues()));
aliOssClientConfig.setUseReaper(Boolean.parseBoolean(schisandraOssAliDTO.getUseReaper()));
aliOssClientConfig.setSupportCname(Boolean.parseBoolean(schisandraOssAliDTO.getSupportCname()));
aliOssClientConfig.setSocketTimeout(schisandraOssAliDTO.getSocketTimeout());
aliOssClientConfig.setSldEnabled(Boolean.parseBoolean(schisandraOssAliDTO.getSldEnabled()));
aliOssClientConfig.setProxyWorkstation(schisandraOssAliDTO.getProxyWorkstation());
aliOssClientConfig.setIdleConnectionTime(schisandraOssAliDTO.getIdleConnectionTime());
aliOssClientConfig.setLogConnectionPoolStats(Boolean.parseBoolean(schisandraOssAliDTO.getLogConnectionPoolStats()));
aliOssClientConfig.setCnameExcludeList(Arrays.asList(Optional.ofNullable(ali.getCnameExcludeList()).orElse("").split(",")));
aliOssClientConfig.setConnectionTimeout(ali.getConnectionTimeout());
aliOssClientConfig.setConnectionTTL(ali.getConnectionTTL());
aliOssClientConfig.setProtocol(Protocol.valueOf(ali.getProtocol()));
aliOssClientConfig.setConnectionRequestTimeout(ali.getConnectionRequestTimeout());
aliOssClientConfig.setMaxConnections(ali.getMaxConnections());
aliOssClientConfig.setProxyPort(Integer.parseInt(ali.getProxyPort()));
aliOssClientConfig.setProxyDomain(ali.getProxyDomain());
aliOssClientConfig.setCrcCheckEnabled(Boolean.parseBoolean(ali.getCrcCheckEnabled()));
aliOssClientConfig.setTickOffset(ali.getTickOffset());
aliOssClientConfig.setProxyHost(ali.getProxyHost());
aliOssClientConfig.setProxyPassword(ali.getProxyPassword());
aliOssClientConfig.setProxyUsername(ali.getProxyUsername());
aliOssClientConfig.setVerifySSLEnable(Boolean.parseBoolean(ali.getVerifySSLEnable()));
aliOssClientConfig.setUseSystemPropertyValues(Boolean.parseBoolean(ali.getUseSystemPropertyValues()));
aliOssClientConfig.setUseReaper(Boolean.parseBoolean(ali.getUseReaper()));
aliOssClientConfig.setSupportCname(Boolean.parseBoolean(ali.getSupportCname()));
aliOssClientConfig.setSocketTimeout(ali.getSocketTimeout());
aliOssClientConfig.setSldEnabled(Boolean.parseBoolean(ali.getSldEnabled()));
aliOssClientConfig.setProxyWorkstation(ali.getProxyWorkstation());
aliOssClientConfig.setIdleConnectionTime(ali.getIdleConnectionTime());
aliOssClientConfig.setLogConnectionPoolStats(Boolean.parseBoolean(ali.getLogConnectionPoolStats()));
aliOssConfig.setClientConfig(aliOssClientConfig);
}
return aliOssClient(aliOssConfig);
}
public StandardOssClient aliOssClient(AliOssConfig aliOssConfig) {
return new AliOssClient(ossClient(aliOssConfig), aliOssConfig);
aliOssClient.setAliOssConfig(aliOssConfig);
aliOssClient.setOss(ossClient(aliOssConfig));
return aliOssClient;
}
public OSS ossClient(AliOssConfig aliOssConfig) {

View File

@@ -31,6 +31,7 @@ import lombok.extern.slf4j.Slf4j;
import okhttp3.Headers;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;
import javax.annotation.Resource;
import java.io.File;
@@ -51,7 +52,6 @@ import java.util.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Scope("Property")
@Component
public class MinioOssClient implements StandardOssClient {

View File

@@ -11,11 +11,13 @@ import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
/**
@@ -23,8 +25,8 @@ import java.util.concurrent.TimeUnit;
* @version MinioConfiguration.java, v 1.1 2021/11/24 15:20 chenmin Exp $
* Created on 2021/11/24
*/
//@Configuration
@Component
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
@Slf4j
public class MinioOssConfiguration {
@@ -34,9 +36,13 @@ public class MinioOssConfiguration {
@Resource
private SchisandraOssMinioDomainService schisandraOssMinioDomainService;
public StandardOssClient minioOssClient() {
SchisandraOssMinioBO minioBO = schisandraOssMinioDomainService.getMinioConfig(1L);
SchisandraOssMinioDTO minio = SchisandraOssMinioDTOConverter.INSTANCE.convertBOToDTO(minioBO);
public StandardOssClient minioOssClient(String userId) {
CompletableFuture<SchisandraOssMinioDTO> futurePrice = CompletableFuture.supplyAsync(() -> {
SchisandraOssMinioBO minioBO = schisandraOssMinioDomainService.getMinioConfig(Long.valueOf(userId));
SchisandraOssMinioDTO minioDTO = SchisandraOssMinioDTOConverter.INSTANCE.convertBOToDTO(minioBO);
return minioDTO;
});
SchisandraOssMinioDTO minio = futurePrice.join();
if (ObjectUtils.isEmpty(minio)) {
log.error("minio配置信息获取失败");
}

View File

@@ -0,0 +1,17 @@
package com.schisandra.oss.infra.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new MybatisPlusAllSqlLog());
return mybatisPlusInterceptor;
}
}

View File

@@ -0,0 +1,116 @@
package com.schisandra.oss.infra.config;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
public class MybatisPlusAllSqlLog implements InnerInterceptor {
public static final Logger log = LoggerFactory.getLogger("sys-sql");
@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
logInfo(boundSql, ms, parameter);
}
@Override
public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
BoundSql boundSql = ms.getBoundSql(parameter);
logInfo(boundSql, ms, parameter);
}
private static void logInfo(BoundSql boundSql, MappedStatement ms, Object parameter) {
try {
log.info("parameter = " + parameter);
// 获取到节点的id,即sql语句的id
String sqlId = ms.getId();
log.info("sqlId = " + sqlId);
// 获取节点的配置
Configuration configuration = ms.getConfiguration();
// 获取到最终的sql语句
String sql = getSql(configuration, boundSql, sqlId);
log.info("完整的sql:{}", sql);
} catch (Exception e) {
log.error("异常:{}", e.getLocalizedMessage(), e);
}
}
// 封装了一下sql语句使得结果返回完整xml路径下的sql语句节点id + sql语句
public static String getSql(Configuration configuration, BoundSql boundSql, String sqlId) {
return sqlId + ":" + showSql(configuration, boundSql);
}
// 进行?的替换
public static String showSql(Configuration configuration, BoundSql boundSql) {
// 获取参数
Object parameterObject = boundSql.getParameterObject();
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
// sql语句中多个空格都用一个空格代替
String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
if (!CollectionUtils.isEmpty(parameterMappings) && parameterObject != null) {
// 获取类型处理器注册器类型处理器的功能是进行java类型和数据库类型的转换
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
// 如果根据parameterObject.getClass()可以找到对应的类型,则替换
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(parameterObject)));
} else {
// MetaObject主要是封装了originalObject对象提供了get和set的方法用于获取和设置originalObject的属性值,主要支持对JavaBean、Collection、Map三种类型对象的操作
MetaObject metaObject = configuration.newMetaObject(parameterObject);
for (ParameterMapping parameterMapping : parameterMappings) {
String propertyName = parameterMapping.getProperty();
if (metaObject.hasGetter(propertyName)) {
Object obj = metaObject.getValue(propertyName);
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(obj)));
} else if (boundSql.hasAdditionalParameter(propertyName)) {
// 该分支是动态sql
Object obj = boundSql.getAdditionalParameter(propertyName);
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(obj)));
} else {
// 打印出缺失,提醒该参数缺失并防止错位
sql = sql.replaceFirst("\\?", "缺失");
}
}
}
}
return sql;
}
// 如果参数是String则添加单引号 如果是日期,则转换为时间格式器并加单引号; 对参数是null和不是null的情况作了处理
private static String getParameterValue(Object obj) {
String value;
if (obj instanceof String) {
value = "'" + obj.toString() + "'";
} else if (obj instanceof Date) {
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
DateFormat.DEFAULT, Locale.CHINA);
value = "'" + formatter.format(new Date()) + "'";
} else {
if (obj != null) {
value = obj.toString();
} else {
value = "";
}
}
return value;
}
}

View File

@@ -0,0 +1,52 @@
package com.schisandra.oss.infra.config;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Properties;
@Intercepts({
@Signature(type = Executor.class, method = "update", args = {MappedStatement.class,
Object.class}),
@Signature(type = Executor.class, method = "query", args = {MappedStatement.class,
Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})})
public class SqlStatementInterceptor implements Interceptor {
public static final Logger log = LoggerFactory.getLogger("sys-sql");
@Override
public Object intercept(Invocation invocation) throws Throwable {
long startTime = System.currentTimeMillis();
try {
return invocation.proceed();
} finally {
long timeConsuming = System.currentTimeMillis() - startTime;
log.info("执行SQL:{}ms", timeConsuming);
if (timeConsuming > 999 && timeConsuming < 5000) {
log.info("执行SQL大于1s:{}ms", timeConsuming);
} else if (timeConsuming >= 5000 && timeConsuming < 10000) {
log.info("执行SQL大于5s:{}ms", timeConsuming);
} else if (timeConsuming >= 10000) {
log.info("执行SQL大于10s:{}ms", timeConsuming);
}
}
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}