Udostępnij za pośrednictwem


Obsługa zasobów platformy Azure w usłudze Spring Cloud

Ten artykuł dotyczy:✅ w wersji 4.19.0 ✅ w wersji 5.19.0

Projekt Spring udostępnia abstrakcję Spring Resources w celu uzyskania dostępu do wielu zasobów niskiego poziomu. Projekt udostępnia interfejsy, takie jak Resource, ResourceLoader i ResourcePatternResolver. Platforma Spring Cloud Azure implementuje te interfejsy dla usług Azure Storage, które umożliwiają interakcję z obiektami blob i udziałami plików usługi Azure Storage przy użyciu modelu programowania Spring. Platforma Spring Cloud Azure udostępnia spring-cloud-azure-starter-storage-blob i spring-cloud-azure-starter-storage-file-share do automatycznego konfigurowania obiektów blob usługi Azure Storage i udziału plików usługi Azure Storage.

W poniższej tabeli wymieniono biblioteki powiązane z usługą Azure Storage:

Rozrusznik Usługa Opis
spring-cloud-azure-starter-storage-blob Azure Storage Blob Umożliwia przechowywanie i uzyskiwanie dostępu do danych bez struktury na dużą skalę w blokowych obiektach blob.
spring-cloud-azure-starter-storage-file-share Udział plików usługi Azure Storage Oferuje w pełni zarządzane udziały plików w chmurze, do których można uzyskać dostęp z dowolnego miejsca za pośrednictwem standardowego protokołu SMB (Industry Standard Server Message Block).

Konfiguracja zależności

<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
    </dependency>
</dependencies>

Zależność spring-cloud-azure-starter-storage-blob jest wymagana tylko wtedy, gdy używasz obiektu blob usługi Azure Storage.

Zależność spring-cloud-azure-starter-storage-file-share jest wymagana tylko w przypadku korzystania z udziału plików usługi Azure Storage.

Napiwek

Udostępniamy również spring-cloud-azure-starter-storage do obsługi wszystkich funkcji usługi Storage. Jeśli zdecydujesz się go użyć, spring.cloud.azure.storage.enable jest właściwością do skonfigurowania, a wartość domyślna to true. Następnie możesz użyć spring.cloud.azure.storage.<storage-service>.enable, aby wyłączyć niepotrzebne usługi.

Konfiguracja

Nuta

Jeśli używasz podmiotu zabezpieczeń do uwierzytelniania i autoryzacji za pomocą identyfikatora Entra firmy Microsoft na potrzeby uzyskiwania dostępu do zasobu platformy Azure, upewnij się, że podmiot zabezpieczeń otrzymał wystarczające uprawnienia dostępu do zasobu platformy Azure. Aby uzyskać więcej informacji, zobacz Authorize access with Microsoft Entra ID.

W poniższej tabeli wymieniono konfigurowalne właściwości spring-cloud-azure-starter-storage-blob:

Własność Domyślny Opis
spring.cloud.azure.storage.blob.enabled prawdziwy Wartość wskazująca, czy usługa Azure Blob Storage jest włączona.
spring.cloud.azure.storage.blob.endpoint Identyfikator URI umożliwiający nawiązanie połączenia z usługą Azure Blob Storage.
spring.cloud.azure.storage.blob.account-key Klucz prywatny do nawiązania połączenia z usługą Azure Blob Storage.
spring.cloud.azure.storage.blob.account-name Nazwa konta obiektu blob usługi Azure Storage.

W poniższej tabeli wymieniono konfigurowalne właściwości spring-cloud-azure-starter-storage-file-share:

Własność Domyślny Opis
spring.cloud.azure.storage.fileshare.enabled prawdziwy Wartość wskazująca, czy usługa Azure File Storage jest włączona.
spring.cloud.azure.storage.fileshare.endpoint Identyfikator URI umożliwiający nawiązanie połączenia z usługą Azure File Storage.
spring.cloud.azure.storage.fileshare.account-key Klucz prywatny do nawiązania połączenia z usługą Azure File Storage.
spring.cloud.azure.storage.fileshare.account-name Nazwa konta udziału plików usługi Azure Storage.

Podstawowe użycie

Dodaj następujące właściwości do pliku application.yml:

spring:
  cloud:
    azure:
      storage:
        blob:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint: ${STORAGE_BLOB_ENDPOINT}
        fileshare:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint:  ${STORAGE_FILESHARE_ENDPOINT}

Pobieranie zasobu

Pobieranie zasobu za pomocą @Value

Możesz użyć adnotacji @Value("azure-blob://[your-container-name]/[your-blob-name]"), aby automatycznie połączyć zasób obiektu blob, jak pokazano w poniższym przykładzie:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

Możesz użyć adnotacji @Value("azure-file://[your-fileshare-name]/[your-file-name]"), aby automatycznie połączyć zasób pliku, jak pokazano w poniższym przykładzie:

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

Pobieranie zasobu za pomocą modułu ResourceLoader

@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");

// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");

Pobieranie zasobów według wzorca wyszukiwania

Do wyszukiwania zasobów można użyć klasy implementacji ResourcePatternResolver. Użyj AzureStorageBlobProtocolResolver, aby wyszukać zasoby blob i AzureStorageFileProtocolResolver w celu wyszukiwania zasobów file.

  • Aby wyszukać wzorzec, searchPattern powinien rozpoczynać się od azure-blob:// lub azure-file://. Na przykład azure-blob://**/** oznacza wyświetlenie listy wszystkich obiektów blob we wszystkich kontenerach, a azure-blob://demo-container/** oznacza wyświetlenie listy wszystkich obiektów blob w kontenerze demo-container, w tym wszystkich podfolderów.

  • W przypadku wyszukiwania lokalizacji searchLocation powinna rozpoczynać się od azure-blob:// lub azure-file://, a pozostała ścieżka pliku powinna istnieć. W przeciwnym razie zostanie zgłoszony wyjątek.

@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;

@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;

// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");

// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");

Obsługa za pomocą zasobu

Pobieranie danych z określonego zasobu

Zasób można pobrać z usługi Azure Storage Blob lub udziału plików przy użyciu metody getInputStream()Resource.

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

//...

// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();

// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();

Przekazywanie danych do określonego zasobu

Możesz przekazać go do zasobu do usługi Azure Blob lub magazynu plików, odrzucając Resource Spring do WritableResource, jak pokazano w poniższym przykładzie:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

String data = "sampledata";

// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
    blobos.write(data.getBytes());
}

// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
    fileos.write(data.getBytes());
}

Przekazywanie wieloczęściowe

Pliki większe niż 4 miB zostaną przekazane równolegle do usługi Azure Storage.

Próbki

Zobacz repozytoria storage-blob-sample i storage-file-sample repozytoria w witrynie GitHub.