如何使用Azure Storage的Spring Boot Starter

本文将指导你使用 Spring Initializr 创建一个自定义应用程序,然后将Azure storage starter 添加到你的应用程序中,然后使用你的应用程序将一个blob上传到你的Azure存储账户。

准备

为了遵循本文的步骤,需要以下先决条件。

要完成本文的步骤,需要Spring Boot 2.0或更高版本。

为你的应用程序创建一个Azure存储账户和blob容器

下面的程序在门户中创建了一个Azure存储账户和容器。

1. 打开Azure portal 并且登录

https://portal.azure.com/

2. 选择创建一个资源,然后开始,再选择存储账户

3. 在创建存储账户页面,输入以下信息

  • 选择订阅。
  • 选择资源组,或创建一个新的资源组。
  • 输入一个独特的存储账户名称,这将成为你的存储账户的URI的一部分。例如:如果你输入- ·wingtiptoysstorage·作为名称,URI 将是 wingtiptoysstorage.core.windows.net
  • 为你的存储账户指定位置。

4. 创建和部署

  • 当你指定了上面列出的选项后,选择审查+创建。
  • 查看规格,然后选择 "创建 "来创建你的存储账户。
  • 当部署完成后,选择转到资源。

5. 选择容器

  • 为容器命名。
  • 从下拉列表中选择Blob。

6. Azure portal将在创建后列出你的blob容器。

你也可以使用Azure CLI来创建Azure存储账户和容器,使用以下步骤。记住要用你自己的值来替换占位符的值(在角括号里)。

  • 打开一个命令提示符。
  • 登录到你的Azure账户
az login
  • 如果你没有一个资源组,用以下命令创建一个
az group create \
   --name <resource-group> \
   --location <location>
  • 通过使用以下命令创建一个存储账户
 az storage account create \
   --name <storage-account-name> \
   --resource-group <resource-group> \
   --location <location>
  • 要创建一个容器,使用以下命令
 az storage container create \
   --account-name <storage-account-name> \
   --name <container-name> \
   --auth-mode login

用Spring Initializr创建一个简单的Spring Boot应用程序

下面的程序创建了Spring boot应用程序.

  • 打开 https://start.springboot.io/
  • 指定以下选项
    • 生成一个Maven项目
    • 指定Java 11
    • 指定一个等于或大于2.4.6的Spring Boot版本
    • 为你的应用程序指定Group 和Artifact 名称
    • 添加Spring Web依赖

Spring Initializr使用Group和Artifact名称来创建包名;例如:com.wingtiptoys.storage

  • 当你指定了上面列出的选项后,选择生成。
  • 当出现提示时,将项目下载到你本地电脑的一个路径上。
  • 在你把文件解压到本地系统后,你的简单的Spring Boot应用程序就可以编辑了。

配置你的Spring Boot应用以使用 Azure storage starter

下面的程序将Spring boot应用程序配置为使用Azure存储。

1. 在你的应用程序的根目录下找到pom.xml文件

例如:

C:\SpringBoot\storage\pom.xml

或者

/users/example/home/storage/pom.xml

2. 在文本编辑器中打开pom.xml文件

Spring Cloud Azure Storage启动器添加到<dependencies>列表中。

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>azure-spring-boot-starter-storage</artifactId>
   <version>3.4.0</version>
</dependency>

然后保存

配置你的Spring Boot应用以使用你的Azure存储账户

下面的程序将Spring boot应用程序配置为使用你的Azure存储账户。

1. 在你的应用程序的资源目录中找到application.properties

例如

C:\SpringBoot\storage\src\main\resources\application.properties

或者

/users/example/home/storage/src/main/resources/application.properties

2. 在文本编辑器中打开application.properties文件

添加以下几行,然后用你的存储账户的适当属性替换样本值

# Storage account name length should be between 3 and 24 and use numbers and lower-case letters only
azure.storage.account-name=<storage-account-name>

# Fill storage account access key copied from portal
azure.storage.account-key=<storage-account-access-key>

# Fill storage blob endpoint URL copied from portal
azure.storage.blob-endpoint=<storage-endpoint-URL>

配置项说明:

配置项 描述 是否必须
azure.storage.accountName Azure存储账户的名称。 Yes
azure.storage.accountKey Azure存储账户的访问密钥。 Yes
azure.storage.blob-endpoint Azure Storage账户的blob端点URL。 当使用存储blob资源时,可选。
azure.storage.file-endpoint Azure存储账户的文件端点URL。 当使用存储文件资源时,可选。

保存并关闭application.properties文件

增加示例代码以实现基本的Azure存储功能

在本节中,您将创建必要的Java类,以便在Azure存储账户中存储blob。

创建 BlobController

1. 在应用程序的包目录下创建一个名为BlobController

例如:

C:\SpringBoot\storage\src\main\java\com\wingtiptoys\storage\BlobController.java

或者

/users/example/home/storage/src/main/java/com/wingtiptoys/storage/BlobController.java

2. 在文本编辑器中打开blob控制器的Java文件

在文件中添加以下几行。将<your-resource-group><your-artifact-name><your-container-name><your-blob-name>的占位符替换为你的值。

package com.<your-resource-group>.<your-artifact-name>;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

@RestController
@RequestMapping("blob")
public class BlobController {

    @Value("azure-blob://<your-container-name>/<your-blob-name>")
    private Resource blobFile;

    @GetMapping("/readBlobFile")
    public String readBlobFile() throws IOException {
        return StreamUtils.copyToString(
                this.blobFile.getInputStream(),
                Charset.defaultCharset());
    }

    @PostMapping("/writeBlobFile")
    public String writeBlobFile(@RequestBody String data) throws IOException {
        try (OutputStream os = ((WritableResource) this.blobFile).getOutputStream()) {
            os.write(data.getBytes());
        }
        return "file was updated";
    }
}

保存,然后关闭

3. 打开一个命令提示符,改变目录到你的pom.xml文件所在的文件夹

例如

cd C:\SpringBoot\storage

或者

cd /users/example/home/storage

4. 用Maven构建你的Spring Boot应用程序并运行它

例如

mvn clean package
mvn spring-boot:run

5. 一旦你的应用程序运行,你可以使用curl来测试你的应用程序

a. 发送一个POST请求来更新一个文件的内容。

curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080/blob/writeBlobFile

你应该看到一个响应,即 “file was updated”。

b. 发送一个GET请求来验证文件的内容。

curl -X GET http://localhost:8080/blob/readBlobFile

你应该看到你发布的 “new message” 文本。

总结

在本教程中,你使用Spring Initializr创建了一个新的Java应用程序,将Azure存储启动器添加到你的应用程序中,然后将你的应用程序配置为向Azure存储账户上传一个blob。

清理资源

当不再需要时,请使用 Azure portal 删除本文中创建的资源,以避免意外的费用。