乐趣区

关于oss:阿里云oss封装成springbootstarter

一、创立 spring-boot-starter-oss

自定义 Spring Boot Starter 能够将某个性能或模块封装成一个依赖,以便其余我的项目能够不便地引入和应用。以下是一个简略的 Spring Boot Starter 实现示例,用于封装阿里云 OSS 的操作.

1、创立一个 Maven 我的项目并增加依赖,在 pom.xml 文件中增加以下依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>2.6.2</version>
</dependency>

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.13.1</version>
</dependency>

2、创立主动配置类

创立一个主动配置类 OssAutoConfiguration,在该类中配置阿里云 OSS 的相干信息,并创立一个 OssTemplate Bean,用于封装 OSS 操作。示例代码如下:

@Configuration
@EnableConfigurationProperties(OssProperties.class)
public class OssAutoConfiguration {
    
    private final OssProperties ossProperties;
    
    public OssAutoConfiguration(OssProperties ossProperties) {this.ossProperties = ossProperties;}
    
    @Bean
    @ConditionalOnMissingBean
    public OssTemplate ossTemplate() {OSS ossClient = new OSSClientBuilder()
                .build(ossProperties.getEndpoint(),
                        ossProperties.getAccessKeyId(),
                        ossProperties.getAccessKeySecret());
        return new OssTemplate(ossClient);
    }
}

在这个示例中,@EnableConfigurationProperties 注解用于启用 OssProperties 属性类的配置,并在构造方法中注入该属性类。@ConditionalOnMissingBean 注解示意如果应用程序中不存在名为 ossTemplate 的 Bean,则创立一个新的 OssTemplate Bean。

3、创立属性类

创立一个 OssProperties 属性类,用于封装阿里云 OSS 的相干配置信息。示例代码如下:

@ConfigurationProperties(prefix = "oss")
public class OssProperties {
    
    private String endpoint;
    
    private String accessKeyId;
    
    private String accessKeySecret;
    
    // 省略 getter 和 setter
}

在这个示例中,@ConfigurationProperties 注解用于指定前缀为 oss 的配置项,并在类中定义了阿里云 OSS 的相干配置属性。

4、创立封装类

创立一个 OssTemplate 封装类,用于封装阿里云 OSS 的操作。示例代码如下:

@Data
public class OssTemplate {
    
    private final OSS ossClient;
    
    public OssTemplate(OSS ossClient) {this.ossClient = ossClient;}
    
    public void uploadFile(String bucketName, String objectName, InputStream inputStream) {ossClient.putObject(bucketName, objectName, inputStream);
    }
    
    // 省略其余操作方法
}

在这个示例中,OssTemplate 封装了阿里云 OSS 的上传文件操作,通过调用 OSS 对象的 putObject 办法实现。

5、创立 Starter

在 Maven 我的项目中创立 spring-boot-starter-oss 模块,并增加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.13.1</version>
</dependency>

在 src/main/resources 目录下创立 META-INF/spring.factories 文件,并增加以下配置:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.starter.oss.OssAutoConfiguration

6、测试 Starter

在其余 Spring Boot 我的项目中增加 spring-boot-starter-oss 依赖,并在配置文件中增加阿里云 OSS 的相干配置项,如下所示:

oss:
  endpoint: http://oss-cn-hangzhou.aliyuncs.com
  accessKeyId: yourAccessKeyId
  accessKeySecret: yourAccessKeySecret

而后在我的项目中注入 OssTemplate Bean,并应用其办法操作阿里云 OSS,如下所示:

@RestController
public class OssController {
    
    private final OssTemplate ossTemplate;
    
    public OssController(OssTemplate ossTemplate) {this.ossTemplate = ossTemplate;}
    
    @PostMapping("/upload")
    public void uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        String bucketName = "yourBucketName";
        String objectName = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();
        ossTemplate.uploadFile(bucketName, objectName, inputStream);
    }
}

通过这个简略的示例,咱们能够看到如何应用 Spring Boot Starter 封装阿里云 OSS 的操作,将其封装成一个依赖,不便其余我的项目应用。这种形式不仅进步了代码的复用性,还能进步开发效率。

二、下面 demo 是否存在能够优化项?

1、在 demo 中,咱们没有为配置项提供默认值。这可能会导致在应用该 Starter 时须要手动配置所有必须的属性。为了进步用户体验,咱们能够提供默认值,从而缩小必须手动配置的属性数量。

2、在 demo 中,咱们没有解决由阿里云 OSS API 抛出的异样。如果上传文件失败,咱们须要在控制器中捕捉并解决这些异样,以防止向客户端抛出错误信息。因而,咱们能够自定义异样处理程序来解决这些异样,并向客户端返回更有意义的错误信息。

3、在 demo 中,咱们只编写了一个简略的集成测试来验证 Starter 是否可能正确运行。为了确保 Starter 的品质和稳定性,咱们应该编写更多的测试来笼罩更多的场景,并通过自动化测试来继续集成和部署 Starter。

退出移动版