一、创立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。