Bagikan melalui


Dukungan Spring Cloud Azure untuk Docker Compose

Artikel ini menjelaskan cara mengintegrasikan Spring Cloud Azure dengan Docker Compose untuk menulis pengujian integrasi yang efektif untuk aplikasi Anda.

Docker Compose adalah alat untuk menentukan dan menjalankan aplikasi multi-kontainer. Ini adalah kunci untuk membuka kunci pengalaman pengembangan dan penyebaran yang efisien dan efisien.

spring-cloud-azure-docker-compose Pustaka sekarang mendukung pengujian integrasi untuk layanan Azure berikut:

Koneksi layanan

Koneksi layanan adalah koneksi ke layanan jarak jauh apa pun. Konfigurasi otomatis Spring Boot dapat menggunakan detail koneksi layanan dan menggunakannya untuk membuat koneksi ke layanan jarak jauh. Saat melakukannya, detail koneksi lebih diutamakan daripada properti konfigurasi terkait koneksi.

Saat Anda menggunakan Docker compose, Anda dapat membuat detail koneksi secara otomatis untuk layanan yang berjalan dalam kontainer dengan menambahkan @SpringBootTest anotasi dengan spring.docker.compose.file properti di kelas pengujian.

Kelas xxxDockerComposeConnectionDetailsFactory terdaftar dengan spring.factories. Pabrik-pabrik ini membuat ConnectionDetails kacang berdasarkan DockerComposeConnectionDetails.

Tabel berikut ini menyediakan informasi tentang kelas pabrik detail koneksi yang didukung dalam spring-cloud-azure-docker-compose JAR:

Kelas pabrik detail koneksi Biji detail koneksi
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Menyiapkan dependensi

Konfigurasi berikut menyiapkan dependensi yang diperlukan:

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

Membuat file sumber daya pengujian

Buat file-file ini di src/test/resources folder:

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

Membuat kode Java

Contoh kode berikut menunjukkan penggunaan dasar 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 {
    }
}

Dengan spring.docker.compose.file, konfigurasi ini memungkinkan kacang terkait di aplikasi untuk berkomunikasi dengan Blob Storage yang berjalan di dalam kontainer Docker. Tindakan ini dilakukan dengan secara otomatis menentukan AzureStorageBlobConnectionDetails kacang, yang kemudian digunakan oleh konfigurasi otomatis Blob Storage, mengambil alih properti konfigurasi terkait koneksi apa pun.

Samples

Untuk informasi selengkapnya, lihat contoh spring-cloud-azure-docker-compose.