Упражнение. Настройка приложения Java с помощью Maven
В этом уроке показано, как создать базовое консольное приложение с помощью предпочитаемой интегрированной среды разработки для редактирования кода. При желании вы сможете использовать предпочитаемый терминал для выполнения кода.
Ресурсы Azure Cosmos DB
Для выполнения этого занятия Microsoft Learn предоставляет бесплатную изолированную среду Azure, в которой можно создавать учетные записи и ресурсы. Вы настроите учетную запись Azure Cosmos DB в этой подписке, а затем создадите базу данных и контейнер.
- Войдите на портал Azure, используя ту же учетную запись, с которой вы активировали песочницу.
- С помощью портала Azure создайте учетную запись Azure Cosmos DB с предпочитаемым именем. Когда будет предложено выбрать группу ресурсов для учетной записи, найдите группу ресурсов
[Группа ресурсов песочницы] и выберите ее. - В своей учетной записи Azure Cosmos DB создайте базу данных с именем Users.
- В базе данных Users создайте контейнер WebCustomers с ключом раздела /userId. Подготовьте 400 ЕЗ/с для WebCustomers.
Создание рабочего каталога
Мы предоставляем шаблон для приложения Java. Клонируйте репозиторий шаблона в систему.
git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
Откройте проводник Windows и перейдите к клонированному репозиторию. Введите подкаталог java_lab.
Внимание
Вся работа для этого модуля будет находиться в подкаталоге java_lab.
Шаблон содержит файл Maven pom.xml, который уже извлекает необходимые зависимости для проекта. Откройте этот файл и изучите его, чтобы найти следующую зависимость:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-cosmos</artifactId> <version>LATEST</version> </dependency>
Эта зависимость извлекает последнюю версию пакета SDK Azure Cosmos DB для Java. Теперь этот файл можно закрыть.
Далее вам нужно выполнить сборку и запустить Hello World. Откройте этот проект с помощью интегрированной среды разработки или терминала. В зависимости от интегрированной среды разработки файл pom.xml можно открыть в подкаталоге java в качестве проекта.
После открытия проекта перейдите в папку src/main/java/com/azure/cosmos/examples/mslearnbasicapp и откройте файл CosmosApp.java, который является шаблоном для разрабатываемого приложения Java. Должно отобразиться примерно следующее:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class CosmosApp { /** For application to log INFO and ERROR. */ private static Logger logger = LoggerFactory.getLogger(CosmosApp.class.getSimpleName()); private CosmosApp() { // not called } /** * Main. * @param args Command line arguments */ public static void main(final String[] args) { logger.info("Hello World."); } }
Сам по себе код приложения реализует просто текст Hello World.
Если в интегрированной среде разработки есть средства для сборки и запуска приложения Maven, выполните сборку и запустите приложение с помощью интегрированной среды разработки и убедитесь, что приложение регистрирует
Hello World
в терминале.Если вы будете использовать терминал для сборки и запуска приложения Maven: выполните следующую команду, чтобы создать проект Maven:
mvn clean package
Затем запустите:
mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
Убедитесь, что приложение выводит в терминал следующие данные:
INFO: Hello World.
Подключение приложения к Azure Cosmos DB
В классе
CosmosApp
создайте следующие переменные статического класса для сведений о подключении к Azure Cosmos DB./** Azure Cosmos DB endpoint URI. */ private static String endpointUri = "<your-cosmosdb-hostname>"; /** Azure Cosmos DB primary key. */ private static String primaryKey = "<your-cosmosdb-master-key>";
Вернитесь на портал Azure, перейдите в область Ключи, а затем скопируйте и вставьте URL-адрес конечной точки Azure Cosmos DB и первичный ключ в определения переменных выше.
Например, с универсальным кодом ресурса (URI)
https://cosmosacct.documents.azure.com:443/
новое назначение переменной будет выглядеть следующим образом:private static String endpointUri = "https://cosmosacct.documents.azure.com:443/";
. Если первичный ключelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
, новое назначение переменной будет выглядеть следующим образом:private static String primaryKey = "elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==";
.
Создание экземпляра CosmosAsyncClient
Теперь мы создадим экземпляр CosmosAsyncClient
, который является представлением службы Azure Cosmos DB на стороне клиента. Такой клиент позволяет настраивать и выполнять запросы к службе.
В файле CosmosApp.java добавьте следующее объявление статической переменной в класс
CosmosApp
./** Azure Cosmos DB client instance. */ private static CosmosAsyncClient client; /** Azure Cosmos DB database instance. */ private static CosmosAsyncDatabase database; /** Azure Cosmos DB container instance. */ private static CosmosAsyncContainer container;
Скорее всего, классы
client
,database
иcontainer
еще не импортированы в файл Java. Поэтому мы сделаем это сейчас. Некоторые IDE могут обеспечить автоматическое импортирование зависимостей на основе введенного кода, и это может быть полезным. Как правило, если мы предоставляем блок кода для вставки, вам может потребоваться добавить некоторые инструкцииimport
, чтобы он работал.Создайте метод
private void
с именемbasicOperations
без аргументов в классе.Добавьте следующий код, чтобы создать экземпляр
CosmosAsyncClient
в методеbasicOperations
, и включите код, чтобы проверить, существует ли база данных Users.client = new CosmosClientBuilder() .endpoint(endpointUri) .key(primaryKey) .consistencyLevel(ConsistencyLevel.EVENTUAL) .directMode() .contentResponseOnWriteEnabled(true) .buildAsyncClient(); database = client.getDatabase("Users"); container = database.getContainer("WebCustomers"); logger.info("Database and container validation complete"); client.close();
На этом этапе метод
basicOperations
содержит код для взаимодействия с Azure Cosmos DB. Этот метод не вызывается вmain
, поэтому наше приложение продолжает выводить "Hello World!". В качестве проверки создайте и запустите CosmosApp.java в интегрированной среде разработки или запустите программу в терминале, используя следующий код:mvn clean package mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
Убедитесь, что приложение выводит в терминал следующие данные:
INFO: Hello World.
Скопируйте и вставьте следующий код в
main
метод, перезаписав текущуюlogger.info("Hello World.");
строку.try { CosmosApp p = new CosmosApp(); p.basicOperations(); } catch (CosmosException e) { logger.error("Failed while executing app.", e); } finally { logger.info("End of demo, press any key to exit."); }
Это приведет к активации кода Azure Cosmos DB в приложении.
Выполните сборку и запустите CosmosApp.java в интегрированной среде разработки или запустите программу в терминале:
mvn clean package mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
В терминале может появиться большое количество сообщений журнала, часть из которых создается пакетом SDK. Изучите их и убедитесь, что приложение выводит в терминал следующие данные:
INFO: Database and container validation complete
В этом уроке вы создали основу для приложения Java в Azure Cosmos DB. Вы настроили приложение Maven, создали базовый проект Hello World и расширили его для подключения проекта к конечной точке Azure Cosmos DB.
Мы предоставляем вам шаблон для приложения Java. Клонирование репозитория шаблонов в систему
git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
Откройте проводник Windows и перейдите к клонированному репозиторию. Введите подкаталог spring_lab.
Внимание
Вся работа для этого модуля будет находиться в подкаталоге spring_lab.
Шаблон содержит файл Maven pom.xml, который уже извлекает необходимые зависимости для проекта. Откройте этот файл и изучите его, чтобы найти следующую зависимость.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-spring-data-cosmos</artifactId> <version>LATEST</version> </dependency>
Эта зависимость извлекает последнюю версию Azure Cosmos DB для Spring Data. Теперь этот файл можно закрыть.
Подключение приложения к Azure Cosmos DB
Откройте этот проект с помощью интегрированной среды разработки или терминала. В зависимости от интегрированной среды разработки файл pom.xml можно открыть в подкаталоге spring в качестве проекта. После открытия проекта перейдите в папку src/main/resources/ с помощью проводника. В ней должен находиться файл application.properties.rename. В Spring Data особое внимание уделяется файлам конфигурации, а не жестко заданным параметрам конфигурации. Чтобы создать файл конфигурации для проекта Spring Data, скопируйте application.properties.rename в application.properties и откройте новый файл application.properties. Вы должны увидеть сообщение наподобие
cosmos.uri=${ACCOUNT_HOST} cosmos.key=${ACCOUNT_KEY} cosmos.secondaryKey=${SECONDARY_ACCOUNT_KEY} dynamic.collection.name=spel-property-collection # Populate query metrics cosmos.queryMetricsEnabled=true
Вы собираетесь заполнить
${ACCOUNT_HOST}
и${ACCOUNT_KEY}
любым образом: скопировав и вставив значения в application.properties или определив эти переменные среды в IDE. На следующем шаге будут представлены значения, которые должны иметь эти переменные.Вернитесь на портал Azure, перейдите в область Ключи, а затем скопируйте универсальный код ресурса (URI) конечной точки Azure Cosmos DB и первичный ключ. Как уже говорилось на предыдущем шаге, назначьте вышеупомянутым переменным универсальный код ресурса конечной точки Azure Cosmos DB и первичный ключ любым способом на ваш выбор.
Например, если кодом URI является
https://cosmosacct.documents.azure.com:443/
и вы решите вставить конечную точку и первичный ключ в application.properties, строка application.properties будет впоследствии выглядеть таким образом:cosmos.uri=https://cosmosacct.documents.azure.com:443/
. Если первичный ключelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
, с помощью того же процесса новое назначение переменной будет выглядеть следующим образом:cosmos.key=elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
.
Настройка клиента Azure Cosmos DB
Spring Data Azure Cosmos DB автоматически создает экземпляр клиента Azure Cosmos DB при запуске. Клиент Azure Cosmos DB — это клиентское представление службы Azure Cosmos DB, используемое для выполнения запросов к службе. Код может настроить клиент Azure Cosmos DB, прежде чем будет создан его экземпляр, используя набор методов построителя и свойства, извлеченные из application.properties.
Откройте файл CosmosProperties.java. Мы предоставили его в заполненной форме, чтобы вы просто изучили его содержимое.
@ConfigurationProperties(prefix = "cosmos") public class CosmosProperties { private String uri; private String key; private String secondaryKey; private boolean queryMetricsEnabled; public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getSecondaryKey() { return secondaryKey; } public void setSecondaryKey(String secondaryKey) { this.secondaryKey = secondaryKey; } public boolean isQueryMetricsEnabled() { return queryMetricsEnabled; } public void setQueryMetricsEnabled(boolean enableQueryMetrics) { this.queryMetricsEnabled = enableQueryMetrics; } }
Просмотрите члены класса
uri
,key
,secondaryKey
иqueryMetricsEnabled
. Просмотрите еще раз application.properties и убедитесь, что имена членовCosmosProperties
в точности соответствуют именам свойства application.properties. КлассCosmosProperties
предоставляет методы получения и методы задания для остальной части приложения, чтобы обеспечить доступ к параметрам конфигурации из application.properties. Обратите внимание, что здесь нет кода для извлечения конфигурации из application.properties — Spring Data понимает структуру этого файла и автоматически задает переменные-члены после синтаксического анализа файла конфигурации.Мы будем использовать эту конфигурацию в дальнейшем при настройке клиента Azure Cosmos DB.
Изучите класс
CosmosSampleConfiguration
и найдите пустой методcosmosClientBuilder
в файле CosmosSampleConfiguration.java:@Bean public CosmosClientBuilder cosmosClientBuilder() { return null; }
Во время запуска Spring Data автоматически вызовет этот метод, получит объект
CosmosClientBuilder
, возвращаемый этим методом, и вызовет его методbuild()
. На этом этапе на основе параметров конфигурации, содержащихся вCosmosClientBuilder
, будет создан экземплярCosmosAsyncClient
. Этот метод можно использовать для настройкиCosmosClientBuilder
с помощью методов построителя.Обратите внимание, что мы используем внедрение через конструктор (а не внедрение полей) с помощью @Autowired) для создания экземпляра переменной
properties
и заполнения его переменных-членов проанализированными значениями из файла конфигурации. Это гарантирует наличие всех необходимых зависимостей при создании экземпляра данного класса и упрощает написание тестового кода в дальнейшем.//use constructor injection for spring dependencies public CosmosSampleConfiguration(CosmosProperties properties){ this.properties = properties; }
Вы можете использовать
properties
, чтобы получить универсальный код ресурса и ключ для учетной записи Azure Cosmos DB и реализоватьcosmosClientBuilder
, как показано ниже.@Bean public CosmosClientBuilder cosmosClientBuilder() { DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig(); return new CosmosClientBuilder() .endpoint(properties.getUri()) .key(properties.getKey()) .directMode(directConnectionConfig); }
В данной реализации выполняются такие задачи:
- извлечение универсального кода ресурса и ключа из
properties
; - подключение их к методам построителя
endpoint
иkey
; - дополнительная настройка сетевого подключения в службе Azure Cosmos DB. (В режиме непосредственного взаимодействия клиентское приложение обращается непосредственно к секциям серверной части Azure Cosmos DB.)
- извлечение универсального кода ресурса и ключа из
Вернитесь к файлу CosmosSampleConfiguration.java и найдите метод
getDatabaseName
:@Override protected String getDatabaseName() { return ""; }
Измените возвращаемое значение по умолчанию на
"Users"
(имя базы данных). Таким образом, при автоматическом подключении Spring Data к Azure Cosmos DB во время запуска проект Spring Data будет подключаться к базе данных *Users.Перейдите к файлу WebCustomer.java. Обратите внимание, что классу
WebCustomer
предшествует заметка@Container
:@Container(containerName = "", ru = "")
Объект
@Container
принимает два аргумента:containerName
: имя контейнера Azure Cosmos DB (WebCustomers)ru
: подготовленная пропускная способность контейнера. 400 ЕЗ/с является хорошим значением по умолчанию для упражнения Microsoft Learn.
Настройте
@Container
для вашего варианта использования, как показано ниже:@Data @NoArgsConstructor @AllArgsConstructor @Container(containerName = "WebCustomers", ru = "400") public class WebCustomer {
На этом этапе проект Spring Data настроен для взаимодействия с Azure Cosmos DB. Далее вам нужно выполнить сборку и запустить Hello World. Перейдите в папку src/main/java/com/azure/cosmos/examples/springexamples и откройте файл CosmosSample.java, который является шаблоном для разрабатываемого приложения Spring Data. Должно отобразиться примерно следующее:
// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. package com.azure.cosmos.examples.springexamples; import com.azure.cosmos.CosmosException; import com.azure.cosmos.examples.springexamples.common.CouponsUsed; import com.azure.cosmos.examples.springexamples.common.OrderHistory; import com.azure.cosmos.examples.springexamples.common.ShippingPreference; import com.azure.cosmos.models.CosmosItemResponse; import com.azure.cosmos.models.PartitionKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @SpringBootApplication public class CosmosSample implements CommandLineRunner { private final Logger logger = LoggerFactory.getLogger(CosmosSample.class); private ReactiveWebCustomerRepository reactiveWebCustomerRepository; //constructor dependency injection public CosmosSample(ReactiveWebCustomerRepository reactiveWebCustomerRepository){ this.reactiveWebCustomerRepository = reactiveWebCustomerRepository; } public void run(String... var1) { logger.info("Hello world."); } }
Сам по себе код приложения реализует просто текст Hello World.
Если в интегрированной среде разработки есть средства для сборки и запуска приложения Maven, выполните сборку и запустите приложение с помощью интегрированной среды разработки и убедитесь, что приложение регистрирует
Hello World
в терминале.Если вы будете использовать терминал для сборки и запуска приложения Maven: выполните следующую команду, чтобы создать проект Maven:
mvn clean package
Затем запустите:
mvn spring-boot:run
Убедитесь, что приложение выводит в терминал следующие данные среди остальных данных:
INFO: Hello World.
В этом уроке вы создали основу для приложения Java в Azure Cosmos DB. Вы настроили приложение Maven и расширили базовый проект Hello World для подключения его к конечной точке Azure Cosmos DB.