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