다음을 통해 공유


Docker Compose에 대한 Spring Cloud Azure 지원

이 문서에서는 Spring Cloud Azure를 Docker Compose 와 통합하여 애플리케이션에 대한 효과적인 통합 테스트를 작성하는 방법을 설명합니다.

Docker Compose 는 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구입니다. 간소화되고 효율적인 개발 및 배포 환경을 구현하는 것이 핵심입니다.

이제 라이브러리는 spring-cloud-azure-docker-compose 다음 Azure 서비스에 대한 통합 테스트를 지원합니다.

서비스 연결

서비스 연결은 모든 원격 서비스에 대한 연결입니다. Spring Boot의 자동 구성은 서비스 연결의 세부 정보를 사용하고 이를 사용하여 원격 서비스에 대한 연결을 설정할 수 있습니다. 이렇게 하면 연결 세부 정보가 연결 관련 구성 속성보다 우선합니다.

Docker 작성을 사용하는 경우 테스트 클래스의 속성에 주석 spring.docker.compose.file 을 추가하여 @SpringBootTest 컨테이너에서 실행되는 서비스에 대한 연결 세부 정보를 자동으로 만들 수 있습니다.

클래스는 xxxDockerComposeConnectionDetailsFactory .에 등록됩니다 spring.factories. 이러한 팩터리에서는 을 ConnectionDetails 기반으로 콩을 DockerComposeConnectionDetails만듭니다.

다음 표에서는 JAR에서 지원되는 연결 세부 정보 팩터리 클래스에 spring-cloud-azure-docker-compose 대한 정보를 제공합니다.

연결 세부 정보 팩터리 클래스 연결 세부 정보 빈
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

종속성 설정

다음 구성은 필요한 종속성을 설정합니다.

  <properties>
    <version.spring.cloud.azure>7.1.0</version.spring.cloud.azure>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-dependencies</artifactId>
        <version>${version.spring.cloud.azure}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-docker-compose</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

테스트 리소스 파일 만들기

폴더에 다음 파일을 만듭니다 src/test/resources .

storage-compose.yaml:

services:
  storage:
    image: mcr.microsoft.com/azure-storage/azurite:latest
    ports:
      - '10000'
      - '10001'
      - '10002'
    command: azurite -l /data --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --skipApiVersionCheck

Java 코드 만들기

다음 코드 예제에서는 Docker compose의 기본 사용을 보여 줍니다.

@SpringBootTest(properties = {
        "spring.docker.compose.skip.in-tests=false",
        "spring.docker.compose.file=classpath:storage-compose.yaml",
        "spring.docker.compose.stop.command=down"
})
public class AzureBlobResourceDockerComposeTest {

    @Value("azure-blob://testcontainers/message.txt")
    private Resource blobFile;

    @Test
    void blobResourceShouldWriteAndReadContent() throws IOException {
        String originalContent = "Hello World!";
        try (OutputStream os = ((WritableResource) this.blobFile).getOutputStream()) {
            os.write(originalContent.getBytes());
        }
        String resultContent = StreamUtils.copyToString(this.blobFile.getInputStream(), Charset.defaultCharset());
        assertThat(resultContent).isEqualTo(originalContent);
    }

    @Configuration(proxyBeanMethods = false)
    @ImportAutoConfiguration(classes = {
            AzureGlobalPropertiesAutoConfiguration.class,
            AzureStorageBlobAutoConfiguration.class,
            AzureStorageBlobResourceAutoConfiguration.class})
    static class Config {
    }
}

spring.docker.compose.file이 구성을 사용하면 앱의 관련 빈이 Docker 컨테이너 내에서 실행되는 Blob Storage와 통신할 수 있습니다. 이 작업은 빈을 AzureStorageBlobConnectionDetails 자동으로 정의한 다음 Blob Storage 자동 구성에서 사용되며 연결 관련 구성 속성을 재정의하여 수행됩니다.

견본

자세한 내용은 spring-cloud-azure-docker-compose 예제를 참조하세요.