Sdílet prostřednictvím


Podpora Spring Cloud Azure pro Docker Compose

Tento článek popisuje, jak integrovat Spring Cloud Azure s Docker Compose za účelem zápisu efektivních integračních testů pro vaše aplikace.

Docker Compose je nástroj pro definování a spouštění vícekontenerových aplikací. Je to klíč k odemknutí zjednodušeného a efektivního prostředí pro vývoj a nasazení.

Knihovna spring-cloud-azure-docker-compose teď podporuje testování integrace pro následující služby Azure:

Připojení služeb

Připojení služby je připojení k jakékoli vzdálené službě. Automatická konfigurace Spring Bootu může využívat podrobnosti o připojení služby a používat je k navázání připojení ke vzdálené službě. Při tom mají podrobnosti o připojení přednost před všemi vlastnostmi konfigurace souvisejícími s připojením.

Když používáte Docker compose, můžete automaticky vytvořit podrobnosti připojení pro službu spuštěnou v kontejneru přidáním @SpringBootTest poznámky s spring.docker.compose.file vlastností v testovací třídě.

Třídy xxxDockerComposeConnectionDetailsFactory jsou registrovány v spring.factories. Tyto továrny vytvářejí ConnectionDetails bean založený na objektu DockerComposeConnectionDetails.

Následující tabulka obsahuje informace o třídách objektu pro vytváření podrobností připojení podporovaných v jar spring-cloud-azure-docker-compose :

Třída objektu pro vytváření podrobností připojení Podrobnosti připojení bean
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Nastavení závislostí

Následující konfigurace nastaví požadované závislosti:

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

Vytvoření testovacích souborů prostředků

Ve složce vytvořte tyto soubory 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

Vytváření kódů Java

Následující příklad kódu ukazuje základní použití 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 {
    }
}

Tato spring.docker.compose.filekonfigurace umožňuje v aplikaci komunikovat se službou Blob Storage spuštěnou v kontejneru Dockeru související boby. Tato akce se provádí tak, že automaticky definujete AzureStorageBlobConnectionDetails bean, který pak používá automatická konfigurace služby Blob Storage a přepisuje všechny vlastnosti konfigurace související s připojením.

Ukázky

Další informace najdete v příkladech spring-cloud-azure-docker-compose.