Partilhar via


Suporte Spring Cloud Azure para Docker Compose

Este artigo descreve como integrar o Spring Cloud Azure com o Docker Compose para escrever testes de integração eficazes para as suas aplicações.

O Docker Compose é uma ferramenta para definir e executar aplicações multi-contentor. É a chave para desbloquear uma experiência de desenvolvimento e implementação eficiente e eficiente.

A spring-cloud-azure-docker-compose biblioteca suporta agora testes de integração para os seguintes serviços Azure:

Ligações de serviço

Uma ligação de serviço é uma ligação a qualquer serviço remoto. A configuração automática do Spring Boot pode consumir os detalhes de uma ligação de serviço e usá-los para estabelecer uma ligação a um serviço remoto. Ao fazê-lo, os detalhes da ligação têm prioridade sobre quaisquer propriedades de configuração relacionadas com a ligação.

Quando usa o Docker compose, pode criar automaticamente detalhes de ligação para um serviço a correr num contentor adicionando a @SpringBootTest anotação com a spring.docker.compose.file propriedade na classe de teste.

As xxxDockerComposeConnectionDetailsFactory aulas estão registadas em spring.factories. Estas fábricas criam um ConnectionDetails feijão baseado num DockerComposeConnectionDetails.

A tabela seguinte fornece informações sobre os detalhes das ligações das classes de fábrica suportadas no spring-cloud-azure-docker-compose JAR:

Detalhes da ligação, classe de fábrica Detalhes da ligação, grão
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Configurar dependências

A seguinte configuração estabelece 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 ficheiros de recurso de teste

Crie estes ficheiros 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 seguinte exemplo de código demonstra a utilização básica 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.file, esta configuração permite que os grãos relacionados na aplicação comuniquem com o Blob Storage a correr dentro do contentor Docker. Esta ação é feita definindo automaticamente um AzureStorageBlobConnectionDetails bean, que é então usado pela autoconfiguração do Blob Storage, sobrepondo-se a quaisquer propriedades de configuração relacionadas com a ligação.

Samples

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