Доступ к данным с помощью 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— создать ее бесплатно.
пакет средств разработки Java (JDK)версии 8 или более поздней.
Создание Azure Cosmos DB с помощью портала Azure
Чтобы создать экземпляр Azure Cosmos DB, выполните следующие действия.
Перейдите к порталу Azure и выберите Создать ресурс.
Выберите базы данных, а затем выберите Azure Cosmos DB.
На экране Создание учетной записи Azure Cosmos DB выберите Azure Cosmos DB для NoSQL.
На странице Azure Cosmos DB введите следующие сведения:
- Выберите подписку , которую вы хотите использовать для базы данных.
- Укажите, следует ли создать новую группу ресурсов для базы данных или выбрать существующую группу ресурсов.
- Введите уникальное имя учетной записи, которое будет использоваться в качестве URI для вашей базы данных. Например, contosoaccounttest.
- Укажите местоположение для базы данных.
- Выберите Применить скидку на бесплатный уровень, если вы хотите создать учетную запись только в демонстрационных целях.
- Оставьте остальные параметры и настройки по умолчанию как есть.
Выберите Просмотр и создание, просмотрите спецификации и выберите Создать.
После создания базы данных она отображается на панели мониторинга Azure , а также в разделе Все ресурсы и на странице Azure Cosmos DB. Сведения о создании базы данных и контейнера для созданной базы данных Azure Cosmos DB см. в разделе Добавление базы данных и контейнеракраткого руководства по созданию учетной записи Azure Cosmos DB, базы данных, контейнера и элементов на портале Azure. Вы можете выбрать базу данных для любого из этих расположений, чтобы открыть страницу свойств кэша.
Когда отобразится страница свойств вашей базы данных, выберите Ключи и скопируйте URI и ключи доступа для вашей базы данных. Эти значения используются в приложении Spring Boot.
Важный
В вашей недавно созданной службе Azure Cosmos DB назначьте роль Owner
для вашей текущей учетной записи Azure. Дополнительные сведения см. в статье Назначение ролей Azure с помощью портала Azure.
Создание приложения Spring Boot с помощью Spring Initializr
Выполните следующие действия, чтобы создать проект приложения Spring Boot с поддержкой Azure. В качестве альтернативы можно использовать пример spring-cloud-azure-data-cosmos-sample в репозитории azure-spring-boot-samples. Затем можно перейти непосредственно к сборке и тестированиюприложения.
Перейдите к https://start.spring.io/.
Укажите следующие параметры:
- Создайте проект Maven с Java.
- Укажите версию Spring Boot на2.7.11.
- Укажите имена группы и артефакта для вашего приложения.
- Выберите 17 для версии Java.
- Добавьте службу поддержки Azure в список зависимостей.
Заметка
Spring Initializr использует имена группы
и артефакта и, для формирования имени пакета; например:, указанные как com.example.wingtiptoysdata .Версия Spring Boot может быть выше версии, поддерживаемой службой поддержки Azure. После автоматического создания проекта можно вручную изменить версию Spring Boot на самую высокую поддерживаемую Azure версию, которую можно найти в Spring-Versions-Mapping.
Если вы указали указанные ранее параметры, выберите GENERATE.
По запросу скачайте проект в указанное место на вашем локальном компьютере и извлеките файлы.
Теперь простое приложение Spring Boot готово для редактирования.
Настройка приложения Spring Boot для использования начального средства Azure Spring Boot
Найдите файл pom.xml в каталоге приложения; Например:
C:\SpringBoot\wingtiptoysdata\pom.xml
-или-
/users/example/home/wingtiptoysdata/pom.xml
Откройте файл 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.
Сохраните и закройте файл pom.xml.
Настройка приложения Spring Boot для использования Azure Cosmos DB
Найдите файл application.properties в каталоге ресурсов вашего приложения; например:
C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties
-или-
/users/example/home/wingtiptoysdata/src/main/resources/application.properties
Откройте файл 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
Сохраните и закройте файл application.properties.
Добавление примера кода для реализации основных функций базы данных
В этом разделе описано, как создать два класса Java для хранения пользовательских данных. Затем вы измените основной класс приложения, чтобы создать экземпляр класса User
и сохранить его в базе данных.
Определение базового класса для хранения пользовательских данных
Создайте файл с именем User.java в том же каталоге, что и основной файл Java приложения.
Откройте файл 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); } }
Сохраните и закройте файл User.java.
Определение интерфейса репозитория данных
Создайте файл с именем UserRepository.java в том же каталоге, что и основной файл Java приложения.
Откройте файл 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 для основных операций сохранения, удаления и поиска.Сохраните и закройте файл UserRepository.java.
Изменение основного класса приложения
Найдите основной файл Java приложения в каталоге пакета приложения, например:
C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java
-или-
/users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java
Откройте основной файл 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()); } }
Сохраните и закройте основной файл Java приложения.
Создание и тестирование приложения
Откройте командную строку и перейдите в папку, в которой находится файл pom.xml; Например:
cd C:\SpringBoot\wingtiptoysdata
-или-
cd /users/example/home/wingtiptoysdata
Используйте следующую команду для сборки и запуска приложения:
./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 см. в следующих статьях:
[Spring Cloud Azure Starter для Spring Data Azure Cosmos DB]
Развертывание приложения Spring Boot в Linux в Службе приложений Azure
запуск приложения Spring Boot в кластере Kubernetes в службе контейнеров 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.