次の方法で共有


Docker Compose に対する Spring Cloud Azure のサポート

この記事では、Spring Cloud Azure と Docker Compose を統合して、アプリケーションの効果的な統合テストを作成する方法について説明します。

Docker Compose は、マルチコンテナー アプリケーションを定義して実行するためのツールです。 これは、合理化された効率的な開発とデプロイのエクスペリエンスのロックを解除するための鍵です。

spring-cloud-azure-docker-compose ライブラリでは、次の Azure サービスの統合テストがサポートされるようになりました。

サービス接続

サービス接続は、任意のリモート サービスへの接続です。 Spring Boot の自動構成では、サービス接続の詳細を使用して、リモート サービスへの接続を確立できます。 その場合、接続に関連する構成プロパティよりも接続の詳細が優先されます。

Docker compose を使用する場合は、テスト クラスの spring.docker.compose.file プロパティを使用して@SpringBootTest注釈を追加することで、コンテナーで実行されているサービスの接続の詳細を自動的に作成できます。

xxxDockerComposeConnectionDetailsFactory クラスは、spring.factoriesに登録されます。 これらのファクトリは、DockerComposeConnectionDetailsに基づいてConnectionDetails Bean を作成します。

次の表に、 spring-cloud-azure-docker-compose JAR でサポートされている接続の詳細ファクトリ クラスに関する情報を示します。

接続の詳細ファクトリ クラス 接続の詳細 Bean
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を使用すると、この構成により、アプリ内の関連する Bean が、Docker コンテナー内で実行されている Blob Storage と通信できるようになります。 このアクションは、 AzureStorageBlobConnectionDetails Bean を自動的に定義し、Blob Storage の自動構成によって使用され、接続関連の構成プロパティをオーバーライドすることによって実行されます。

サンプル

詳細については、 spring-cloud-azure-docker-compose の例を参照してください