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


Доступ к данным с помощью API NoSQL Azure Cosmos DB

В этой статье показано, как добавить Spring Cloud Azure Starter для Spring Data для Azure Cosmos DB в пользовательское приложение. Этот начальный способ позволяет хранить данные и извлекать данные из базы данных Azure Cosmos DB с помощью Spring Data и Azure Cosmos DB для NoSQL. В этой статье показано, как создать Azure Cosmos DB с помощью портала Azure. Затем в статье показано, как использовать Spring Initializr для создания пользовательского приложения Spring Boot, которое можно использовать с начальным пакетом Spring Boot.

Azure Cosmos DB — это глобально распределенная служба баз данных, которая позволяет разработчикам работать с данными с помощью различных стандартных API, таких как SQL, MongoDB, Graph и API таблиц. Microsoft Spring Boot Starter позволяет разработчикам использовать приложения Spring Boot, которые легко интегрируются с Azure Cosmos DB для NoSQL.

Необходимые условия

Создание Azure Cosmos DB с помощью портала Azure

Чтобы создать экземпляр Azure Cosmos DB, выполните следующие действия.

  1. Перейдите к порталу Azure и выберите Создать ресурс.

  2. Выберите базы данных, а затем выберите Azure Cosmos DB.

  3. На экране Создание учетной записи Azure Cosmos DB выберите Azure Cosmos DB для NoSQL.

    снимок экрана портала Azure, на котором показана страница

  4. На странице Azure Cosmos DB введите следующие сведения:

    • Выберите подписку , которую вы хотите использовать для базы данных.
    • Укажите, следует ли создать новую группу ресурсов для базы данных или выбрать существующую группу ресурсов.
    • Введите уникальное имя учетной записи, которое будет использоваться в качестве URI для вашей базы данных. Например, contosoaccounttest.
    • Укажите местоположение для базы данных.
    • Выберите Применить скидку на бесплатный уровень, если вы хотите создать учетную запись только в демонстрационных целях.
    • Оставьте остальные параметры и настройки по умолчанию как есть.
  5. Выберите Просмотр и создание, просмотрите спецификации и выберите Создать.

    снимок экрана портала Azure, на котором показана страница

  6. После создания базы данных она отображается на панели мониторинга Azure , а также в разделе Все ресурсы и на странице Azure Cosmos DB. Сведения о создании базы данных и контейнера для созданной базы данных Azure Cosmos DB см. в разделе Добавление базы данных и контейнеракраткого руководства по созданию учетной записи Azure Cosmos DB, базы данных, контейнера и элементов на портале Azure. Вы можете выбрать базу данных для любого из этих расположений, чтобы открыть страницу свойств кэша.

  7. Когда отобразится страница свойств вашей базы данных, выберите Ключи и скопируйте URI и ключи доступа для вашей базы данных. Эти значения используются в приложении Spring Boot.

    снимок экрана портала Azure, на котором показана учетная запись Azure Cosmos DB с страницей

Важный

В вашей недавно созданной службе Azure Cosmos DB назначьте роль Owner для вашей текущей учетной записи Azure. Дополнительные сведения см. в статье Назначение ролей Azure с помощью портала Azure.

Создание приложения Spring Boot с помощью Spring Initializr

Выполните следующие действия, чтобы создать проект приложения Spring Boot с поддержкой Azure. В качестве альтернативы можно использовать пример spring-cloud-azure-data-cosmos-sample в репозитории azure-spring-boot-samples. Затем можно перейти непосредственно к сборке и тестированиюприложения.

  1. Перейдите к https://start.spring.io/.

  2. Укажите следующие параметры:

    • Создайте проект Maven с Java.
    • Укажите версию Spring Boot на2.7.11.
    • Укажите имена группы и артефакта для вашего приложения.
    • Выберите 17 для версии Java.
    • Добавьте службу поддержки Azure в список зависимостей.

    Заметка

    Spring Initializr использует имена группы и артефакта , указанные как и, для формирования имени пакета; например: com.example.wingtiptoysdata.

    Версия Spring Boot может быть выше версии, поддерживаемой службой поддержки Azure. После автоматического создания проекта можно вручную изменить версию Spring Boot на самую высокую поддерживаемую Azure версию, которую можно найти в Spring-Versions-Mapping.

  3. Если вы указали указанные ранее параметры, выберите GENERATE.

  4. По запросу скачайте проект в указанное место на вашем локальном компьютере и извлеките файлы.

Теперь простое приложение Spring Boot готово для редактирования.

Настройка приложения Spring Boot для использования начального средства Azure Spring Boot

  1. Найдите файл pom.xml в каталоге приложения; Например:

    C:\SpringBoot\wingtiptoysdata\pom.xml

    -или-

    /users/example/home/wingtiptoysdata/pom.xml

  2. Откройте файл pom.xml в текстовом редакторе и добавьте следующее в элемент <dependencies>:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
    </dependency>
    

    Заметка

    Дополнительные сведения о том, как управлять версиями библиотек Spring Cloud Azure с помощью BOM, см. в разделе "Приступая к работе" руководства разработчика Spring Cloud Azure.

  3. Сохраните и закройте файл pom.xml.

Настройка приложения Spring Boot для использования Azure Cosmos DB

  1. Найдите файл application.properties в каталоге ресурсов вашего приложения; например:

    C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties

    -или-

    /users/example/home/wingtiptoysdata/src/main/resources/application.properties

  2. Откройте файл application.properties в текстовом редакторе и добавьте в файл следующие строки и замените примеры значений соответствующими свойствами для базы данных:

    # Specify the DNS URI of your Azure Cosmos DB.
    spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/
    spring.cloud.azure.cosmos.key=your-cosmosdb-account-key
    
    # Specify the name of your database.
    spring.cloud.azure.cosmos.database=contosoaccounttest
    spring.cloud.azure.cosmos.populate-query-metrics=true
    
  3. Сохраните и закройте файл application.properties.

Добавление примера кода для реализации основных функций базы данных

В этом разделе описано, как создать два класса Java для хранения пользовательских данных. Затем вы измените основной класс приложения, чтобы создать экземпляр класса User и сохранить его в базе данных.

Определение базового класса для хранения пользовательских данных

  1. Создайте файл с именем User.java в том же каталоге, что и основной файл Java приложения.

  2. Откройте файл User.java в текстовом редакторе и добавьте в файл следующие строки, чтобы определить универсальный класс пользователя, в который хранятся и извлекаются значения в базе данных:

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.core.mapping.Container;
    import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
    import org.springframework.data.annotation.Id;
    
    @Container(containerName = "mycollection")
    public class User {
        @Id
        private String id;
        private String firstName;
        @PartitionKey
        private String lastName;
        private String address;
    
        public User() {
    
        }
    
        public User(String id, String firstName, String lastName, String address) {
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
            this.address = address;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return String.format("%s %s, %s", firstName, lastName, address);
        }
    }
    
  3. Сохраните и закройте файл User.java.

Определение интерфейса репозитория данных

  1. Создайте файл с именем UserRepository.java в том же каталоге, что и основной файл Java приложения.

  2. Откройте файл UserRepository.java в текстовом редакторе и добавьте в файл следующие строки, чтобы определить пользовательский интерфейс репозитория, расширяющий интерфейс ReactiveCosmosRepository по умолчанию:

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository;
    import org.springframework.stereotype.Repository;
    import reactor.core.publisher.Flux;
    
    @Repository
    public interface UserRepository extends ReactiveCosmosRepository<User, String> {
        Flux<User> findByFirstName(String firstName);
    }
    

    Интерфейс ReactiveCosmosRepository заменяет интерфейс DocumentDbRepository из предыдущей версии начального элемента. Новый интерфейс предоставляет синхронные и реактивные API для основных операций сохранения, удаления и поиска.

  3. Сохраните и закройте файл UserRepository.java.

Изменение основного класса приложения

  1. Найдите основной файл Java приложения в каталоге пакета приложения, например:

    C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java

    -или-

    /users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java

  2. Откройте основной файл Java приложения в текстовом редакторе и добавьте в файл следующие строки:

    package com.example.wingtiptoysdata;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.util.Assert;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
    
    import java.util.Optional;
    
    @SpringBootApplication
    public class WingtiptoysdataApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(WingtiptoysdataApplication.class);
    
        @Autowired
        private UserRepository repository;
    
        public static void main(String[] args) {
            SpringApplication.run(WingtiptoysdataApplication.class, args);
        }
    
        public void run(String... var1) {
            this.repository.deleteAll().block();
            LOGGER.info("Deleted all data in container.");
    
            final User testUser = new User("testId", "testFirstName", "testLastName", "test address line one");
    
            // Save the User class to Azure Cosmos DB database.
            final Mono<User> saveUserMono = repository.save(testUser);
    
            final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");
    
            //  Nothing happens until we subscribe to these Monos.
            //  findById won't return the user as user isn't present.
            final Mono<User> findByIdMono = repository.findById(testUser.getId());
            final User findByIdUser = findByIdMono.block();
            Assert.isNull(findByIdUser, "User must be null");
    
            final User savedUser = saveUserMono.block();
            Assert.state(savedUser != null, "Saved user must not be null");
            Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match");
    
            firstNameUserFlux.collectList().block();
    
            final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
            Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");
    
            final User result = optionalUserResult.get();
            Assert.state(result.getFirstName().equals(testUser.getFirstName()), "query result firstName doesn't match!");
            Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!");
    
            LOGGER.info("findOne in User collection get result: {}", result.toString());
        }
    }
    
  3. Сохраните и закройте основной файл Java приложения.

Создание и тестирование приложения

  1. Откройте командную строку и перейдите в папку, в которой находится файл pom.xml; Например:

    cd C:\SpringBoot\wingtiptoysdata

    -или-

    cd /users/example/home/wingtiptoysdata

  2. Используйте следующую команду для сборки и запуска приложения:

    ./mvnw clean
    

    Эта команда автоматически запускает приложение в рамках этапа тестирования. Вы также можете использовать:

    ./mvnw spring-boot:run
    

    После некоторых выходных данных сборки и тестирования окно консоли отображает сообщение, аналогичное следующему примеру:

    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : Deleted all data in container.
    
    ... (omitting connection and diagnostics output) ...
    
    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : findOne in User collection get result: testFirstName testLastName, test address line one
    

    Эти выходные сообщения указывают на то, что данные были успешно сохранены в Azure Cosmos DB, а затем снова извлечены.

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, обязательно удалите группу ресурсов, содержащую созданную ранее базу данных Azure Cosmos DB. Группу ресурсов можно удалить на портале Azure.

Дальнейшие действия

Чтобы узнать больше о Spring и Azure, перейдите в центр документации Spring в Azure.

Дополнительные ресурсы

Дополнительные сведения об использовании Azure Cosmos DB и Java см. в следующих статьях:

Дополнительные сведения об использовании приложений Spring Boot в Azure см. в следующих статьях:

Для получения дополнительной информации об использовании Azure с Java см. разделы Azure для разработчиков на Java и Работа с Azure DevOps и Java.

Spring Framework — это решение с открытым исходным кодом, которое помогает разработчикам Java создавать корпоративные приложения. Одним из наиболее популярных проектов, построенных на основе этой платформы, является Spring Boot, который обеспечивает упрощенный подход к созданию автономных приложений Java. Чтобы помочь разработчикам приступить к работе с Spring Boot, в https://github.com/spring-guides/доступны несколько примеров пакетов Spring Boot. Помимо выбора из списка базовых проектов Spring Boot, Spring Initializr помогает разработчикам приступить к созданию пользовательских приложений Spring Boot.