다음을 통해 공유


Spring Cloud Azure 리소스 처리

이 문서는 버전 4.14.0 ✔️ 버전 5.8.0에 적용됩니다. ✔️

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

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

Starter 서비스 설명
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 파일 공유를 사용하는 경우에만 필요합니다.

또한 스토리지의 모든 기능을 지원하기 위해 제공합니다 spring-cloud-azure-starter-storage . 사용하도록 spring.cloud.azure.storage.enable 선택하는 경우 구성할 속성이고 기본값은 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 true 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 true 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 를 사용하여 리소스를 검색할 수 있습니다. 리소스를 검색 blob 하고 AzureStorageFileProtocolResolver 리소스를 검색 file 하는 데 사용합니다AzureStorageBlobProtocolResolver.

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

  • 위치 검색의 searchLocation 경우 시작 azure-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를 사용하여 Azure Storage Blob 또는 파일 공유에서 리소스를 다운로드할 getInputStream() 수 있습니다.

@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 Resource 을 캐스팅하여 Azure Blob 또는 파일 스토리지에 리소스에 업로드할 WritableResource수 있습니다.

@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 리포지토리를 참조하세요.