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

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 menggunakan spring.docker.compose.file, Anda mengaktifkan kacang terkait di aplikasi untuk berkomunikasi dengan Blob Storage berjalan di dalam kontainer Docker. Konfigurasi ini secara otomatis mendefinisikan AzureStorageBlobConnectionDetails kacang, yang digunakan konfigurasi otomatis Blob Storage. Penyiapan ini mengambil alih properti konfigurasi terkait koneksi apa pun.

Samples

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