博客 / 詳情

返回

阿里雲oss封裝成spring-boot-starter的實現及其原理

一、創建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。

三、springboot 的starter 的實現原理

Spring Boot 的 Starter 實際上就是一組依賴管理和自動配置的組合,它可以讓用户更輕鬆地集成各種第三方庫和框架。其實現原理主要有以下兩個方面:
1、Spring Boot Starter 通過 Maven 或 Gradle 的依賴管理機制來管理依賴項。它將需要依賴的庫組織成一個單獨的 Maven 項目,並將其打包成一個 Jar 包。在這個 Jar 包中,定義了需要的依賴項,並將這些依賴項排除掉。然後,將這個 Jar 包發佈到 Maven 中央倉庫或其他倉庫中。用户在使用 Starter 時,只需要在項目中添加一個依賴項,即可自動引入 Starter 中定義的依賴項。

2、Spring Boot Starter 通過自動配置來簡化配置工作。自動配置是通過 Spring Boot 自動掃描類路徑中的 jar 包或類來實現的。在 Starter 中,我們可以定義一個或多個自動配置類,這些自動配置類可以根據用户的配置或者運行時環境來自動配置應用程序的依賴項。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.