Dela via


Stöd för Spring Cloud Azure för Docker Compose

Den här artikeln beskriver hur du integrerar Spring Cloud Azure med Docker Compose för att skriva effektiva integreringstester för dina program.

Docker Compose är ett verktyg för att definiera och köra program med flera containrar. Det är nyckeln till att låsa upp en effektiviserad och effektiv utvecklings- och distributionsupplevelse.

Biblioteket spring-cloud-azure-docker-compose stöder nu integreringstestning för följande Azure-tjänster:

Tjänstanslutningar

En tjänstanslutning är en anslutning till alla fjärrtjänster. Den automatiska konfigurationen av Spring Boot kan använda information om en tjänstanslutning och använda dem för att upprätta en anslutning till en fjärrtjänst. När du gör det har anslutningsinformationen företräde framför eventuella anslutningsrelaterade konfigurationsegenskaper.

När du använder Docker Compose kan du automatiskt skapa anslutningsinformation för en tjänst som körs i en container genom att lägga till anteckningen @SpringBootTestspring.docker.compose.file med egenskapen i testklassen.

Klasserna xxxDockerComposeConnectionDetailsFactory är registrerade med spring.factories. Dessa fabriker skapar en ConnectionDetails böna baserat på en DockerComposeConnectionDetails.

Följande tabell innehåller information om de fabriksklasser för anslutningsinformation som stöds i spring-cloud-azure-docker-compose JAR:

Fabriksklass för anslutningsinformation Bean för anslutningsinformation
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Konfigurera beroenden

Följande konfiguration konfigurerar nödvändiga beroenden:

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

Skapa testresursfiler

Skapa dessa filer i src/test/resources mappen:

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

Skapa Java-koder

I följande kodexempel visas den grundläggande användningen av 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 {
    }
}

Med spring.docker.compose.filegör den här konfigurationen att relaterade bönor i appen kan kommunicera med Blob Storage som körs i Docker-containern. Den här åtgärden utförs genom att automatiskt definiera en AzureStorageBlobConnectionDetails böna, som sedan används av autokonfigurationen av Blob Storage, vilket åsidosätter eventuella anslutningsrelaterade konfigurationsegenskaper.

Exempel

Mer information finns i exemplen spring-cloud-azure-docker-compose.