diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/config/GlobalConfig.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/config/GlobalConfig.java new file mode 100644 index 0000000..6f992f8 --- /dev/null +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/config/GlobalConfig.java @@ -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> 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; + } +} diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java index 760719d..2a92592 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java @@ -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(), "启动检测桶,是否存在不能为空"); + } + } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java index e83bf5a..e7303d2 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java @@ -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 addMinioOss(@RequestBody SchisandraOssMinioDTO schisandraOssMinioDTO) { try { @@ -72,7 +77,7 @@ public class SchisandraOssMinioController { /** * 修改 */ - @RequestMapping("updateMinio") + @RequestMapping("update") public Result updateMinioOss(@RequestBody SchisandraOssMinioDTO schisandraOssMinioDTO) { try { @@ -92,7 +97,7 @@ public class SchisandraOssMinioController { /** * 删除 */ - @RequestMapping("deleteMinio") + @RequestMapping("delete") public Result 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()); } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java index a3a4fdf..95f1888 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java @@ -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"; diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java index 42642dd..ac3f718 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java @@ -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 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) { diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java index 897b58e..41d33ec 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java @@ -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 { diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssConfiguration.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssConfiguration.java index 66651ce..cf681cf 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssConfiguration.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssConfiguration.java @@ -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 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配置信息获取失败"); } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisConfiguration.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisConfiguration.java new file mode 100644 index 0000000..870ca75 --- /dev/null +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisConfiguration.java @@ -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; + } + +} diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisPlusAllSqlLog.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisPlusAllSqlLog.java new file mode 100644 index 0000000..3035587 --- /dev/null +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/MybatisPlusAllSqlLog.java @@ -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 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; + } + +} \ No newline at end of file diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/SqlStatementInterceptor.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/SqlStatementInterceptor.java new file mode 100644 index 0000000..f67168a --- /dev/null +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/java/com/schisandra/oss/infra/config/SqlStatementInterceptor.java @@ -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) { + + } +} \ No newline at end of file