Obsługa platformy Azure platformy Spring Cloud dla platformy Docker Compose

W tym artykule opisano sposób integrowania platformy Spring Cloud Azure z aplikacją Docker Compose w celu pisania skutecznych testów integracji dla aplikacji.

Docker Compose to narzędzie do definiowania i uruchamiania aplikacji wielokontenerowych. Jest to klucz do odblokowania usprawnionego i wydajnego środowiska programowania i wdrażania.

Biblioteka spring-cloud-azure-docker-compose obsługuje teraz testowanie integracji dla następujących usług platformy Azure:

Połączenia usługowe

Połączenie usługi to połączenie z dowolną usługą zdalną. Automatyczna konfiguracja platformy Spring Boot może używać szczegółów połączenia z usługą i używać ich do nawiązywania połączenia z usługą zdalną. W tym przypadku szczegóły połączenia mają pierwszeństwo przed wszelkimi właściwościami konfiguracji powiązanymi z połączeniem.

Gdy używasz narzędzia Docker Compose, możesz automatycznie utworzyć szczegóły połączenia dla usługi uruchomionej w kontenerze, dodając adnotację @SpringBootTest z spring.docker.compose.file właściwością w klasie testowej.

Klasy xxxDockerComposeConnectionDetailsFactory są rejestrowane za pomocą spring.factoriespolecenia . Te fabryki tworzą fasolę ConnectionDetails na podstawie .DockerComposeConnectionDetails

Poniższa tabela zawiera informacje o klasach fabryk szczegółów połączenia obsługiwanych w pliku spring-cloud-azure-docker-compose JAR:

Klasa fabryki szczegółów połączenia Fasola szczegółów połączenia
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Konfigurowanie zależności

Następująca konfiguracja konfiguruje wymagane zależności:

  <properties>
    <version.spring.cloud.azure>7.4.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>

Tworzenie plików zasobów testowych

Utwórz następujące pliki w folderze src/test/resources :

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

Tworzenie kodów Java

Poniższy przykład kodu przedstawia podstawowe użycie narzędzia 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 {
    }
}

Za pomocą polecenia spring.docker.compose.filewłączysz powiązaną fasolę w aplikacji, aby komunikować się z Blob Storage uruchomionym wewnątrz kontenera platformy Docker. Ta konfiguracja automatycznie definiuje fasolęAzureStorageBlobConnectionDetails, której używa Blob Storage automatycznej konfiguracji. Ta konfiguracja zastępuje wszystkie właściwości konfiguracji związane z połączeniem.

Próbki

Aby uzyskać więcej informacji, zobacz przykłady spring-cloud-azure-docker-compose.