Compartir a través de


Compatibilidad de Spring Cloud con Azure para Docker Compose

En este artículo se describe cómo integrar Spring Cloud Azure con Docker Compose para escribir pruebas de integración eficaces para las aplicaciones.

Docker Compose es una herramienta para definir y ejecutar aplicaciones de varios contenedores. Es la clave para desbloquear una experiencia de desarrollo e implementación simplificada y eficaz.

La spring-cloud-azure-docker-compose biblioteca ahora admite pruebas de integración para los siguientes servicios de Azure:

Conexiones de servicio

Una conexión de servicio es una conexión a cualquier servicio remoto. La configuración automática de Spring Boot puede consumir los detalles de una conexión de servicio y usarlas para establecer una conexión a un servicio remoto. Al hacerlo, los detalles de conexión tienen prioridad sobre las propiedades de configuración relacionadas con la conexión.

Al usar Docker Compose, puede crear automáticamente detalles de conexión para un servicio que se ejecuta en un contenedor agregando la @SpringBootTest anotación con la spring.docker.compose.file propiedad en la clase de prueba.

Las xxxDockerComposeConnectionDetailsFactory clases se registran con spring.factories. Estos generadores crean un ConnectionDetails bean basado en .DockerComposeConnectionDetails

En la tabla siguiente se proporciona información sobre las clases de generador de detalles de conexión admitidas en el spring-cloud-azure-docker-compose ARCHIVO JAR:

Clase de generador de detalles de conexión Bean de detalles de conexión
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Configuración de dependencias

La siguiente configuración configura las dependencias necesarias:

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

Creación de archivos de recursos de prueba

Cree estos archivos en la src/test/resources carpeta :

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

Creación de códigos de Java

En el ejemplo de código siguiente se muestra el uso básico 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 {
    }
}

Con spring.docker.compose.file, esta configuración permite que los beans relacionados de la aplicación se comuniquen con Blob Storage que se ejecuta dentro del contenedor de Docker. Esta acción se realiza mediante la definición automática de un AzureStorageBlobConnectionDetails bean, que después se usa en la configuración automática de Blob Storage, reemplazando las propiedades de configuración relacionadas con la conexión.

Muestras

Para más información, consulte los ejemplos spring-cloud-azure-docker-compose.