Megosztás a következőn keresztül:


Spring Cloud Azure-támogatás a Docker Compose-hoz

Ez a cikk azt ismerteti, hogyan integrálhatja a Spring Cloud Azure-t a Docker Compose-nal az alkalmazások hatékony integrációs tesztjeinek megírásához.

A Docker Compose többtárolós alkalmazások definiálása és futtatása. Ez a kulcs az egyszerűsített és hatékony fejlesztési és üzembe helyezési élmény feloldásához.

A spring-cloud-azure-docker-compose kódtár mostantól támogatja a következő Azure-szolgáltatások integrációs tesztelését:

Szolgáltatáskapcsolatok

A szolgáltatáskapcsolat bármely távoli szolgáltatáshoz kapcsolódik. A Spring Boot automatikus konfigurációja felhasználhatja a szolgáltatáskapcsolat részleteit, és segítségével kapcsolatot létesíthet egy távoli szolgáltatással. Ennek során a kapcsolat részletei elsőbbséget élveznek a kapcsolattal kapcsolatos konfigurációs tulajdonságokkal szemben.

A Docker-írás használatakor automatikusan létrehozhat kapcsolati adatokat egy tárolóban futó szolgáltatáshoz, ha hozzáadja a @SpringBootTest megjegyzést a spring.docker.compose.file tesztosztály tulajdonságához.

Az xxxDockerComposeConnectionDetailsFactory osztályok regisztrálva vannak a következővel spring.factories: . Ezek a gyárak létrehoznak egy ConnectionDetails babot egy DockerComposeConnectionDetails.

Az alábbi táblázat a JAR-ban spring-cloud-azure-docker-compose támogatott kapcsolati adatok gyári osztályairól nyújt tájékoztatást:

Kapcsolat részletei gyári osztály Kapcsolat részletei bean
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Függőségek beállítása

A következő konfiguráció állítja be a szükséges függőségeket:

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

Teszterőforrás-fájlok létrehozása

Hozza létre ezeket a fájlokat a src/test/resources mappában:

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

Java-kódok létrehozása

Az alábbi példakód a Docker-írás alapszintű használatát mutatja be:

@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 {
    }
}

Ezzel spring.docker.compose.filea konfigurációval az alkalmazásban lévő kapcsolódó babok kommunikálhatnak a Docker-tárolón belül futó Blob Storage-tal. Ezt a műveletet úgy hajthatja végre, hogy automatikusan definiál egy AzureStorageBlobConnectionDetails babot, amelyet aztán a Blob Storage automatikus konfigurációja használ, felülírva a kapcsolattal kapcsolatos konfigurációs tulajdonságokat.

Példák

További információkért lásd a spring-cloud-azure-docker-compose példákat.