Поделиться через


Поддержка Spring Cloud Azure для Docker Compose

В этой статье описывается, как интегрировать Spring Cloud Azure с Docker Compose для написания эффективных тестов интеграции для приложений.

Docker Compose — это средство для определения и запуска многоконтейнерных приложений. Это ключ к разблокировке упрощенного и эффективного процесса разработки и развертывания.

Теперь spring-cloud-azure-docker-compose библиотека поддерживает тестирование интеграции для следующих служб Azure:

Служебные подключения

Подключение службы — это подключение к любой удаленной службе. Автонастройка Spring Boot может использовать сведения о подключении к службе и использовать их для установки подключения к удаленной службе. При этом сведения о подключении имеют приоритет над любыми свойствами конфигурации, связанными с подключением.

При использовании Docker Compose можно автоматически создавать сведения о подключении для службы, работающей в контейнере, добавив @SpringBootTest заметку со spring.docker.compose.file свойством в тестовом классе.

Классы xxxDockerComposeConnectionDetailsFactory зарегистрированы в spring.factories. Эти фабрики создают боб на ConnectionDetailsDockerComposeConnectionDetailsоснове .

В следующей таблице приведены сведения о классах фабрики сведений о подключении, поддерживаемых spring-cloud-azure-docker-compose в JAR-файле:

Класс фабрики сведений о подключении Сведения о подключении
StorageBlobDockerComposeConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueDockerComposeConnectionDetailsFactory AzureStorageQueueConnectionDetails
EventHubsDockerComposeConnectionDetailsFactory AzureEventHubsConnectionDetails
ServiceBusDockerComposeConnectionDetailsFactory AzureServiceBusConnectionDetails

Настройка зависимостей

Следующая конфигурация настраивает необходимые зависимости:

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

Создание тестовых файлов ресурсов

Создайте эти файлы в папке src/test/resources :

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

В следующем примере кода демонстрируется базовое использование 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 {
    }
}

Эта spring.docker.compose.fileконфигурация позволяет связанным бобам в приложении взаимодействовать с хранилищем BLOB-объектов, работающим внутри контейнера Docker. Это действие выполняется автоматически путем AzureStorageBlobConnectionDetails определения боба, который затем используется автонастройкой хранилища BLOB-объектов, переопределяя все свойства конфигурации, связанные с подключением.

Образцы

Дополнительные сведения см. в примерах spring-cloud-azure-docker-compose.