Docker Compose için Spring Cloud Azure desteği

Bu makalede, uygulamalarınız için etkili tümleştirme testleri yazmak için Spring Cloud Azure'ı Docker Compose ile tümleştirme işlemi açıklanmaktadır.

Docker Compose , çok kapsayıcılı uygulamaları tanımlamaya ve çalıştırmaya yönelik bir araçtır. Kolaylaştırılmış ve verimli bir geliştirme ve dağıtım deneyiminin kilidini açmanın anahtarıdır.

Kitaplık spring-cloud-azure-docker-compose artık aşağıdaki Azure hizmetleri için tümleştirme testini destekliyor:

Hizmet bağlantıları

Hizmet bağlantısı, herhangi bir uzak hizmete bağlantıdır. Spring Boot'un otomatik yapılandırması, bir hizmet bağlantısının ayrıntılarını tüketebilir ve bunları kullanarak uzak bir hizmete bağlantı kurabilir. Bunu yaparken bağlantı ayrıntıları, bağlantıyla ilgili yapılandırma özelliklerine göre önceliklidir.

Docker Compose'u kullandığınızda, test sınıfındaki özelliğiyle spring.docker.compose.file ek açıklamayı @SpringBootTest ekleyerek kapsayıcıda çalışan bir hizmet için otomatik olarak bağlantı ayrıntıları oluşturabilirsiniz.

Sınıflar xxxDockerComposeConnectionDetailsFactory ile spring.factorieskaydedilir. Bu fabrikalar, tabanlı ConnectionDetailsbir DockerComposeConnectionDetails fasulye oluşturur.

Aşağıdaki tabloda JAR'da desteklenen bağlantı ayrıntıları fabrika sınıfları hakkında bilgi verilmektedir spring-cloud-azure-docker-compose :

Bağlantı ayrıntıları fabrika sınıfı Bağlantı ayrıntıları çekirdeği
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Bağımlılıkları ayarla

Aşağıdaki yapılandırma gerekli bağımlılıkları ayarlar:

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

Test kaynak dosyaları oluşturma

Klasörde şu dosyaları src/test/resources oluşturun:

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 kodları oluşturma

Aşağıdaki kod örneğinde Docker Compose'un temel kullanımı gösterilmektedir:

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

kullanarakspring.docker.compose.file, uygulamadaki ilgili çekirdeklerin Docker kapsayıcısında çalışan Blob Depolama iletişim kurmasını sağlarsınız. Bu yapılandırma, Blob Depolama otomatik yapılandırmanın kullandığı bir AzureStorageBlobConnectionDetails çekirdeği otomatik olarak tanımlar. Bu kurulum, bağlantıyla ilgili yapılandırma özelliklerini geçersiz kılar.

Örnekleri

Daha fazla bilgi için spring-cloud-azure-docker-compose örneklerine bakın.