Obsługa zasobów platformy Azure w usłudze Spring Cloud
Ten artykuł dotyczy: ✔️ wersja 4.14.0 ✔️ w wersji 5.8.0
Projekt Spring zapewnia abstrakcję Zasobów Spring 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
automatycznie konfiguruje obiekty blob usługi Azure Storage i udział plików usługi Azure Storage.
W poniższej tabeli wymieniono biblioteki powiązane z usługą Azure Storage:
Starter (początkowy) | 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ść jest wymagana spring-cloud-azure-starter-storage-blob
tylko wtedy, gdy używasz obiektu blob usługi Azure Storage.
Zależność jest wymagana spring-cloud-azure-starter-storage-file-share
tylko wtedy, gdy używasz udziału plików usługi Azure Storage.
Napiwek
Udostępniamy spring-cloud-azure-starter-storage
również obsługę wszystkich funkcji usługi Storage. Jeśli zdecydujesz się go użyć, jest właściwością do spring.cloud.azure.storage.enable
skonfigurowania, a wartość domyślna to true. Następnie możesz użyć spring.cloud.azure.storage.<storage-service>.enable
polecenia , aby wyłączyć niepotrzebne usługi.
Konfigurowanie
Uwaga
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 Autoryzowanie dostępu za pomocą identyfikatora Entra firmy Microsoft.
W poniższej tabeli wymieniono konfigurowalne właściwości programu spring-cloud-azure-starter-storage-blob
:
Właściwości | Domyślny | opis |
---|---|---|
spring.cloud.azure.storage.blob.enabled | prawda | 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 programu spring-cloud-azure-starter-storage-file-share
:
Właściwości | Domyślny | opis |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | prawda | 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. |
Podstawowy sposób użycia
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
Uzyskiwanie zasobu za pomocą polecenia @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
. Służy AzureStorageBlobProtocolResolver
do wyszukiwania blob
zasobów i AzureStorageFileProtocolResolver
wyszukiwania file
zasobów.
W przypadku wyszukiwania
searchPattern
wzorców element powinien zaczynać się odazure-blob://
lubazure-file://
. Na przykładazure-blob://**/**
oznacza wyświetlenie listy wszystkich obiektów blob we wszystkich kontenerach iazure-blob://demo-container/**
oznacza wyświetlenie listy wszystkich obiektów blob wdemo-container
kontenerze, w tym wszystkich podfolderów.W przypadku wyszukiwania
searchLocation
lokalizacji element powinien zaczynać się odazure-blob://
lubazure-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 obiektu blob usługi Azure Storage lub udziału plików przy użyciu getInputStream()
metody 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 platformę Spring Resource
do WritableResource
elementu , 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.
Przykłady
Zobacz repozytoria storage-blob-sample i storage-file-sample w witrynie GitHub.