Partager via


Prise en charge de Spring Cloud Azure pour Docker Compose

Cet article explique comment intégrer Spring Cloud Azure à Docker Compose pour écrire des tests d’intégration efficaces pour vos applications.

Docker Compose est un outil permettant de définir et d’exécuter des applications à plusieurs conteneurs. Il est essentiel de déverrouiller une expérience de développement et de déploiement rationalisée et efficace.

La spring-cloud-azure-docker-compose bibliothèque prend désormais en charge les tests d’intégration pour les services Azure suivants :

Connexions de service

Une connexion de service est une connexion à n’importe quel service distant. La configuration automatique de Spring Boot peut consommer les détails d’une connexion de service et les utiliser pour établir une connexion à un service distant. Dans ce cas, les détails de la connexion sont prioritaires sur toutes les propriétés de configuration liées à la connexion.

Lorsque vous utilisez Docker compose, vous pouvez créer automatiquement des détails de connexion pour un service s’exécutant dans un conteneur en ajoutant l’annotation @SpringBootTest avec la spring.docker.compose.file propriété dans la classe de test.

Les xxxDockerComposeConnectionDetailsFactory classes sont inscrites auprès spring.factoriesde . Ces fabriques créent un ConnectionDetails haricot basé sur un DockerComposeConnectionDetails.

Le tableau suivant fournit des informations sur les classes de fabrique des détails de connexion prises en charge dans le spring-cloud-azure-docker-compose fichier JAR :

Classe fabrique des détails de connexion Détails de connexion bean
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Configurer des dépendances

La configuration suivante configure les dépendances requises :

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

Créer des fichiers de ressources de test

Créez ces fichiers dans le src/test/resources dossier :

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

Créer des codes Java

L’exemple de code suivant illustre l’utilisation de base de 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 {
    }
}

Avec spring.docker.compose.file, cette configuration permet aux haricots associés dans l’application de communiquer avec le stockage Blob s’exécutant à l’intérieur du conteneur Docker. Cette action est effectuée en définissant automatiquement un AzureStorageBlobConnectionDetails haricot, qui est ensuite utilisé par la configuration automatique du Stockage Blob, en remplaçant toutes les propriétés de configuration liées à la connexion.

Échantillons

Pour plus d’informations, consultez les exemples spring-cloud-azure-docker-compose.