Compartilhar via


Suporte do Spring Cloud Azure para Docker Compose

Este artigo descreve como integrar o Spring Cloud Azure ao Docker Compose para gravar testes de integração eficazes para seus aplicativos.

O Docker Compose é uma ferramenta para definir e executar aplicativos de vários contêineres. É a chave para desbloquear uma experiência simplificada e eficiente de desenvolvimento e implantação.

A spring-cloud-azure-docker-compose biblioteca agora dá suporte ao teste de integração para os seguintes serviços do Azure:

Conexões de serviço

Uma conexão de serviço é uma conexão com qualquer serviço remoto. A configuração automática do Spring Boot pode consumir os detalhes de uma conexão de serviço e usá-los para estabelecer uma conexão com um serviço remoto. Ao fazer isso, os detalhes da conexão têm precedência sobre quaisquer propriedades de configuração relacionadas à conexão.

Ao usar o docker compose, você pode criar automaticamente detalhes de conexão para um serviço em execução em um contêiner adicionando a @SpringBootTest anotação com a spring.docker.compose.file propriedade na classe de teste.

As xxxDockerComposeConnectionDetailsFactory classes são registradas com spring.factories. Essas fábricas criam um ConnectionDetails feijão baseado em um DockerComposeConnectionDetails.

A tabela a seguir fornece informações sobre as classes de fábrica de detalhes de spring-cloud-azure-docker-compose conexão com suporte no JAR:

Classe de fábrica de detalhes da conexão Bean de detalhes da conexão
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Configurar dependências

A configuração a seguir configura as dependências necessárias:

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

Criar arquivos de recurso de teste

Crie estes arquivos na src/test/resources pasta:

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

Criar códigos Java

O exemplo de código a seguir demonstra o uso básico do 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 {
    }
}

Com spring.docker.compose.fileisso, essa configuração permite que os feijões relacionados no aplicativo se comuniquem com o Armazenamento de Blobs em execução dentro do contêiner do Docker. Essa ação é feita definindo automaticamente um AzureStorageBlobConnectionDetails bean, que é usado pela configuração automática do Armazenamento de Blobs, substituindo as propriedades de configuração relacionadas à conexão.

Samples

Para obter mais informações, consulte os exemplos spring-cloud-azure-docker-compose.