Aracılığıyla paylaş


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çıklama ekleyerek @SpringBootTest 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ı DockerComposeConnectionDetailsbir ConnectionDetails 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.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>

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ği Docker compose'un temel kullanımını gösterir:

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

ile spring.docker.compose.filebu yapılandırma, uygulamadaki ilgili çekirdeklerin Docker kapsayıcısının içinde çalışan Blob Depolama ile iletişim kurmasını sağlar. Bu eylem, daha sonra Blob Depolama otomatik yapılandırması tarafından kullanılan ve bağlantıyla ilgili yapılandırma özelliklerinin geçersiz kılındığı bir AzureStorageBlobConnectionDetails fasulyeyi otomatik olarak tanımlayarak gerçekleştirilir.

Örnekleri

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