다음을 통해 공유


Spring Cloud Azure 리소스 처리

이 문서는✅ 버전 4.19.0 ✅ 버전 5.19.0에 적용됩니다.

Spring 프로젝트는 여러 하위 수준 리소스에 액세스하기 위한 Spring Resources 추상화 기능을 제공합니다. 이 프로젝트는 Resource, ResourceLoaderResourcePatternResolver같은 인터페이스를 제공합니다. Spring Cloud Azure는 Spring 프로그래밍 모델을 사용하여 Azure Storage Blob 및 파일 공유와 상호 작용할 수 있는 Azure Storage 서비스에 대해 이러한 인터페이스를 구현합니다. Spring Cloud Azure는 Azure Storage Blob 및 Azure Storage 파일 공유를 자동으로 구성하는 spring-cloud-azure-starter-storage-blobspring-cloud-azure-starter-storage-file-share 제공합니다.

다음 표에서는 Azure Storage 관련 라이브러리를 나열합니다.

스타터 서비스 묘사
spring-cloud-azure-starter-storage-blob Azure Storage Blob 구조화되지 않은 데이터를 블록 Blob에서 대규모로 저장하고 액세스할 수 있습니다.
spring-cloud-azure-starter-storage-file-share Azure Storage 파일 공유 업계 표준 SMB(서버 메시지 블록) 프로토콜을 통해 어디서나 액세스할 수 있는 완전 관리형 클라우드 파일 공유를 제공합니다.

종속성 설정

<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>

spring-cloud-azure-starter-storage-blob 종속성은 Azure Storage Blob을 사용하는 경우에만 필요합니다.

spring-cloud-azure-starter-storage-file-share 종속성은 Azure Storage 파일 공유를 사용하는 경우에만 필요합니다.

또한 Storage의 모든 기능을 지원하는 spring-cloud-azure-starter-storage 제공합니다. 사용하도록 선택하는 경우 구성할 속성이고 기본값은 true. 그런 다음 spring.cloud.azure.storage.<storage-service>.enable 사용하여 불필요한 서비스를 사용하지 않도록 설정할 수 있습니다.

구성

메모

보안 주체를 사용하여 Azure 리소스에 액세스하기 위해 Microsoft Entra ID로 인증하고 권한을 부여하는 경우 보안 주체에게 Azure 리소스에 액세스할 수 있는 충분한 권한이 부여되었는지 확인합니다. 자세한 내용은 Microsoft Entra ID사용하여 액세스 권한 부여를 참조하세요.

다음 표에서는 spring-cloud-azure-starter-storage-blob구성 가능한 속성을 나열합니다.

재산 기본값 묘사
spring.cloud.azure.storage.blob.enabled를 Azure Blob Storage 서비스를 사용할 수 있는지 여부를 나타내는 값입니다.
spring.cloud.azure.storage.blob.endpoint Azure Blob Storage에 연결할 URI입니다.
spring.cloud.azure.storage.blob.account-key를 Azure Blob Storage에 연결할 프라이빗 키입니다.
spring.cloud.azure.storage.blob.account-name Azure Storage Blob 계정 이름입니다.

다음 표에서는 spring-cloud-azure-starter-storage-file-share구성 가능한 속성을 나열합니다.

재산 기본값 묘사
spring.cloud.azure.storage.fileshare.enabled를 Azure File Storage 서비스를 사용할 수 있는지 여부를 나타내는 값입니다.
spring.cloud.azure.storage.fileshare.endpoint Azure File Storage에 연결할 URI입니다.
spring.cloud.azure.storage.fileshare.account-key를 Azure File Storage에 연결할 프라이빗 키입니다.
spring.cloud.azure.storage.fileshare.account-name Azure Storage 파일 공유 계정 이름입니다.

기본 사용량

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}

리소스 가져오기

@Value 사용하여 리소스 가져오기

다음 예제와 같이 @Value("azure-blob://[your-container-name]/[your-blob-name]") 주석을 사용하여 Blob 리소스를 자동으로 연결할 수 있습니다.

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

다음 예제와 같이 @Value("azure-file://[your-fileshare-name]/[your-file-name]") 주석을 사용하여 파일 리소스를 자동으로 연결할 수 있습니다.

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

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]");

패턴을 검색하여 리소스 가져오기

ResourcePatternResolver 구현 클래스를 사용하여 리소스를 검색할 수 있습니다. AzureStorageBlobProtocolResolver 사용하여 blob 리소스를 검색하고 AzureStorageFileProtocolResolverfile 리소스를 검색합니다.

  • 패턴 검색의 경우 searchPatternazure-blob:// 또는 azure-file://시작합니다. 예를 들어 azure-blob://**/** 모든 컨테이너의 모든 Blob을 나열하는 것을 의미하며, azure-blob://demo-container/** 하위 폴더를 포함하여 demo-container 컨테이너의 모든 Blob을 나열하는 것을 의미합니다.

  • 위치 검색의 경우 searchLocationazure-blob:// 또는 azure-file:// 시작하고 나머지 파일 경로가 있어야 합니다. 그렇지 않으면 예외가 throw됩니다.

@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");

리소스를 사용하여 처리

특정 리소스에서 데이터 다운로드

Resource getInputStream() 방법으로 Azure Storage Blob 또는 파일 공유에서 리소스를 다운로드할 수 있습니다.

@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();

특정 리소스에 데이터 업로드

다음 예제와 같이 Spring ResourceWritableResource캐스팅하여 Azure Blob 또는 파일 스토리지에 리소스에 업로드할 수 있습니다.

@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());
}

다중 파트 업로드

4MiB보다 큰 파일은 Azure Storage에 병렬로 업로드됩니다.

샘플

GitHub에서 storage-blob-samplestorage-file-sample 리포지토리를 참조하세요.