Freigeben über


Spring Cloud Azure-Unterstützung für Docker Compose

In diesem Artikel wird beschrieben, wie Sie Spring Cloud Azure in Docker Compose integrieren, um effektive Integrationstests für Ihre Anwendungen zu schreiben.

Docker Compose ist ein Tool zum Definieren und Ausführen von Multicontaineranwendungen. Es ist der Schlüssel zum Entsperren einer optimierten und effizienten Entwicklungs- und Bereitstellungserfahrung.

Die spring-cloud-azure-docker-compose Bibliothek unterstützt jetzt Integrationstests für die folgenden Azure-Dienste:

Dienstverbindungen

Eine Dienstverbindung ist eine Verbindung mit einem beliebigen Remotedienst. Die Autokonfiguration von Spring Boot kann die Details einer Dienstverbindung nutzen und diese verwenden, um eine Verbindung mit einem Remotedienst herzustellen. Dabei haben die Verbindungsdetails Vorrang vor verbindungsbezogenen Konfigurationseigenschaften.

Wenn Sie Docker Compose verwenden, können Sie automatisch Verbindungsdetails für einen Dienst erstellen, der in einem Container ausgeführt wird, indem Sie die @SpringBootTest Anmerkung mit der spring.docker.compose.file Eigenschaft in der Testklasse hinzufügen.

Die xxxDockerComposeConnectionDetailsFactory Klassen werden bei spring.factories. Diese Fabriken schaffen eine ConnectionDetails Bohnen basierend auf einem DockerComposeConnectionDetails.

Die folgende Tabelle enthält Informationen zu den in der spring-cloud-azure-docker-compose JAR unterstützten Verbindungsdetails Factoryklassen:

Verbindungsdetails Factoryklasse Verbindungsdetailsanker
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Einrichten von Abhängigkeiten

Die folgende Konfiguration richtet die erforderlichen Abhängigkeiten ein:

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

Erstellen von Testressourcendateien

Erstellen Sie diese Dateien im src/test/resources Ordner:

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

Erstellen von Java-Codes

Im folgenden Codebeispiel wird die grundlegende Verwendung von Docker Compose veranschaulicht:

@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 {
    }
}

Mit spring.docker.compose.filedieser Konfiguration können verwandte Bohnen in der App mit blob Storage kommunizieren, die im Docker-Container ausgeführt werden. Diese Aktion erfolgt durch die automatische Definition einer AzureStorageBlobConnectionDetails Bohnen, die dann von der autokonfigurierten Blob Storage-Konfiguration verwendet wird, um alle verbindungsbezogenen Konfigurationseigenschaften außer Kraft zu setzen.

Beispiele

Weitere Informationen finden Sie in den Beispielen spring-cloud-azure-docker-compose.