一、创立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 的操作。示例代码如下:

@Datapublic 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,如下所示:

@RestControllerpublic 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。