package com.qianwen.core.oss.config; import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.qianwen.core.oss.AliossTemplate; import com.qianwen.core.oss.props.OssProperties; import com.qianwen.core.oss.rule.OssRule; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 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; @EnableConfigurationProperties({OssProperties.class}) @Configuration(proxyBeanMethods = false) @ConditionalOnClass({OSSClient.class}) @AutoConfigureAfter({OssConfiguration.class}) @ConditionalOnProperty(value = {"oss.name"}, havingValue = "alioss") public class AliossConfiguration { private final OssProperties ossProperties; private final OssRule ossRule; public AliossConfiguration(final OssProperties ossProperties, final OssRule ossRule) { this.ossProperties = ossProperties; this.ossRule = ossRule; } @ConditionalOnMissingBean({OSSClient.class}) @Bean public OSSClient ossClient() { ClientConfiguration conf = new ClientConfiguration(); conf.setMaxConnections(1024); conf.setSocketTimeout(50000); conf.setConnectionTimeout(50000); conf.setConnectionRequestTimeout(1000); conf.setIdleConnectionTime(60000L); conf.setMaxErrorRetry(5); return new OSSClient(this.ossProperties.getEndpoint(), new DefaultCredentialProvider(this.ossProperties.getAccessKey(), this.ossProperties.getSecretKey()), conf); } @ConditionalOnMissingBean({AliossTemplate.class}) @ConditionalOnBean({OSSClient.class}) @Bean public AliossTemplate aliossTemplate(OSSClient ossClient) { return new AliossTemplate(ossClient, this.ossProperties, this.ossRule); } }