Oefening: uw Java-app instellen met behulp van Maven
In deze eenheid gaat u een eenvoudige console-app maken met behulp van een IDE naar eigen keuze om code te bewerken. U kunt desgewenst een terminal naar keuze gebruiken om de code uit te voeren.
Azure Cosmos DB-resources maken
Microsoft Learn biedt u een gratis Azure-sandbox waarin u accounts en resources kunt maken om dit lab te voltooien. U stelt een Azure Cosmos DB-account voor dit abonnement in en maakt vervolgens een database en een container.
- Meld u aan bij Azure Portal met hetzelfde account als waarmee u de sandbox hebt geactiveerd.
- Gebruik de Azure-portal om een Azure Cosmos DB-account met een naam naar keuze te maken. Wanneer u de mogelijkheid krijgt een resourcegroep te selecteren voor uw account, zoekt u de resourcegroep
[Sandbox-resourcegroep] op en selecteert u deze groep. - Maak in uw Azure Cosmos DB-account een database met de naam Gebruikers.
- Maak in de gebruikersdatabase een container met de naam WebCustomers met een partitiesleutel van /userId. Richt 400 RU/s in voor WebCustomers.
Uw werkmap maken
We bieden een sjabloon voor uw Java-toepassing. Kloon de sjabloonopslagplaats naar uw systeem.
git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
Open Windows Verkenner en ga naar de gekloonde opslagplaats. Open de submap java_lab.
Belangrijk
Al uw werk voor deze module vindt u in de submap java_lab.
De sjabloon bevat het Maven-bestand pom.xml, waarmee al de vereiste afhankelijkheden voor uw project zijn opgehaald. Open dit bestand en zoek de volgende afhankelijkheid op:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-cosmos</artifactId> <version>LATEST</version> </dependency>
Met deze afhankelijkheid wordt de nieuwste versie van de Azure Cosmos DB Java SDK opgehaald. U kunt het bestand sluiten.
Vervolgens bouwt en voert u Hallo wereld uit. Gebruik uw IDE of de terminal om dit project te openen. Afhankelijk van uw IDE is er mogelijk een optie om het bestand pom.xml als project te openen in de submap Java.
Nadat het project is geopend, gaat u naar src/main/java/com/azure/cosmos/examples/mslearnbasicapp en opent u CosmosApp.java. Dit is een sjabloon voor de Java-toepassing die we gaan ontwikkelen. Het ziet er ongeveer als volgt uit:
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."); } }
Met deze toepassingscode wordt een eenvoudige 'Hallo wereld' geïmplementeerd.
Als uw IDE hulpprogramma's biedt om uw Maven-toepassing te bouwen en uit te voeren: Bouw en voer uw toepassing uit met behulp van de IDE en controleer of de toepassing zich bij de terminal aanmeldt
Hello World
.Als u de terminal gebruikt om uw Maven-toepassing te bouwen en uit te voeren: gebruik de volgende opdracht om het Maven-project te bouwen:
mvn clean package
Voer vervolgens het volgende uit:
mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
Controleer of de toepassing de volgende uitvoer bij de terminal registreert:
INFO: Hello World.
De app verbinden met Azure Cosmos DB
Maak binnen de klasse
CosmosApp
de volgende statische klassevariabelen voor uw Azure Cosmos DB-verbindingsgegevens:/** 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>";
Ga terug naar de Azure-portal, ga naar het deelvenster Sleutels en kopieer/plak de eindpunt-URI en primaire sleutel van Azure Cosmos DB in de voorgaande variabeledefinities.
Als uw URI bijvoorbeeld
https://cosmosacct.documents.azure.com:443/
is, ziet uw nieuwe variabeletoewijzing er als volgt uit:private static String endpointUri = "https://cosmosacct.documents.azure.com:443/";
. Als u primaire sleutelelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
is, ziet uw nieuwe variabeletoewijzing er als volgt uit:private static String primaryKey = "elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==";
.
Het CosmosAsyncClient-exemplaar maken
Het is nu tijd om een CosmosAsyncClient
-exemplaar te maken. Dit is de weergave van de Azure Cosmos DB-service aan de clientzijde. Deze client wordt gebruikt om aanvragen aan de service te configureren en uitvoeren.
Voeg in CosmosApp.java de volgende statische variabeledeclaratie toe aan de klasse
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;
Waarschijnlijk zijn de klassen
client
,database
encontainer
nog niet geïmporteerd in uw Java-bestand. Daarom is het een goed idee om dat nu te doen. Met sommige IDE's kunt u automatisch afhankelijkheden importeren op basis van de code die u typt, wat hier handig kan zijn. U moet er over het algemeen van uitgaan dat wanneer we u een blok code verstrekken, u zelf een aantalimport
-instructies moet toevoegen om ervoor te zorgen dat de code werkt.Maak een
private void
-methode met de naambasicOperations
zonder argumenten in de klasse.Voeg de volgende code toe om een
CosmosAsyncClient
-exemplaar te maken in debasicOperations
-methode en neem code op om te controleren of de database Gebruikers bestaat.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();
Op dit moment bevat uw
basicOperations
-methode de code voor interactie met Azure Cosmos DB. Deze methode wordt echter niet aangeroepenmain
, dus onze toepassing dient nog steeds om 'Hallo wereld' af te drukken. Bouw en voer als controle CosmosApp.java uit in de IDE of voer het programma uit in de terminal met behulp van:mvn clean package mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
Controleer of de toepassing nog steeds de volgende uitvoer bij de terminal registreert:
INFO: Hello World.
Kopieer en plak de volgende code in de
main
methode en overschrijft de huidigelogger.info("Hello World.");
regel.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."); }
Hiermee wordt de Azure Cosmos DB-code in onze toepassing geactiveerd.
Zorg dat u CosmosApp.java bouwt en uitvoert in de IDE of voer het programma uit in de terminal met behulp van:
mvn clean package mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"
Mogelijk wordt er een groot aantal logboekberichten weergeven in de terminal, waarvan sommige worden gegenereerd door de SDK zelf. Bekijk de informatie en controleer of de app de volgende uitvoer registreert bij de terminal:
INFO: Database and container validation complete
In deze eenheid hebt u het fundament voor uw Java-toepassing voor Azure Cosmos DB ingesteld. U hebt uw Maven-toepassing ingesteld, een eenvoudig ' Hallo wereld'-project gemaakt en het project uitgebreid om verbinding met het Azure Cosmos DB-eindpunt te maken.
We bieden u een sjabloon voor uw Java-toepassing. De sjabloonopslagplaats naar uw systeem klonen
git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
Open Windows Verkenner en ga naar de gekloonde opslagplaats. Open de submap spring_lab.
Belangrijk
Al uw werk voor deze module vindt u in de submap spring_lab.
De sjabloon bevat het Maven-bestand pom.xml, waarmee al de vereiste afhankelijkheden voor uw project zijn opgehaald. Open dit bestand en zoek de afhankelijkheid hieronder op:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-spring-data-cosmos</artifactId> <version>LATEST</version> </dependency>
Met deze afhankelijkheid wordt de nieuwste versie van Spring Data Azure Cosmos DB opgehaald. U kunt het bestand sluiten.
De app verbinden met Azure Cosmos DB
Gebruik uw IDE of de terminal om dit project te openen. Afhankelijk van uw IDE is er mogelijk een optie om het bestand pom.xml als project te openen in de submap spring. Nadat het project is geopend, gaat u naar src/main/resources/ met behulp van een hulpprogramma voor verkenner. Als het goed is, ziet u een bestand met de naam application.properties.rename. Spring Data legt de nadruk op configuratiebestanden via in code vastgelegde configuratieparameters. Als u het configuratiebestand voor uw Spring Data-project wilt maken, kopieert u application.properties.rename naar application.properties en opent u het nieuwe bestand application.properties. U ziet het volgende:
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
U vult
${ACCOUNT_HOST}
en${ACCOUNT_KEY}
met behulp van een methode van uw keuze: kopieer de waarden in application.properties of definieer deze omgevingsvariabelen in uw IDE. In de volgende stap ziet u de waarden die deze variabelen moeten bevatten.Ga terug naar de Azure Portal. Ga vervolgens naar het deelvenster Sleutels en kopieer de eindpunt-URI en primaire sleutel van Azure Cosmos DB. Zoals beschreven in de vorige stap, gebruikt u een methode naar keuze om uw eindpunt-URI en primaire sleutel van Azure Cosmos DB toe te wijzen aan de bovengenoemde variabelen.
Als uw URI bijvoorbeeld
https://cosmosacct.documents.azure.com:443/
is en u ervoor kiest om het eindpunt en de primaire sleutel te plakken in application.properties, dan zal de regel in application.properties er als volgt uitzien:cosmos.uri=https://cosmosacct.documents.azure.com:443/
. Als u primaire sleutelelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
is, dan ziet uw nieuwe variabeletoewijzing er als volgt uit als u hetzelfde proces volgt:cosmos.key=elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
.
De Azure Cosmos DB-client configureren
Spring Data Azure Cosmos DB instantieert de Azure Cosmos DB-client automatisch bij het opstarten. De Azure Cosmos DB-client vertegenwoordigt de Azure Cosmos DB-service aan clientzijde en wordt gebruikt om aanvragen naar de service uit te voeren. Met uw code kan de Azure Cosmos DB-client worden geconfigureerd voordat deze wordt geïnstantieerd, met behulp van een set opbouwmethoden en eigenschappen die zijn opgehaald uit application.properties.
Open CosmosProperties.java. We bieden dit bestand in de vorm van een ingevuld formulier, dus bekijk de inhoud.
@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; } }
Bekijk de klasseleden
uri
,key
,secondaryKey
enqueryMetricsEnabled
. In application.properties kunt u zien dat de namen van deCosmosProperties
-leden overeenkomen met de eigenschapsnamen van application.properties. De klasseCosmosProperties
biedt getters en setters voor de rest van uw toepassing om toegang te krijgen tot configuratie-instellingen vanuit application.properties. U ziet hier geen code voor het ophalen van de configuratie van application.properties. Spring Data begrijpt de structuur van dit bestand en stelt de ledenvariabelen automatisch in na het parseren van het configuratiebestand.De installatie wordt voortgezet wanneer we de Azure Cosmos DB-client configureren.
Bekijk in CosmosSampleConfiguration.java de klasse
CosmosSampleConfiguration
en zoek de lege methodecosmosClientBuilder
:@Bean public CosmosClientBuilder cosmosClientBuilder() { return null; }
Bij het opstarten wordt deze methode automatisch door Spring Data aangeroepen. Daarnaast wordt de
CosmosClientBuilder
, die door deze methode wordt geretourneerd, opgehaald. En de methodebuild()
wordt aangeroepen, waarbij een exemplaar vanCosmosAsyncClient
wordt gemaakt op basis van de configuratie-instellingen die zijn opgenomen in deCosmosClientBuilder
. U kunt deze methode gebruiken om deCosmosClientBuilder
te configureren met behulp van opbouwmethoden.U ziet dat we constructorinjectie gebruiken (in plaats van veldinjectie @Autowired) om de
properties
variabele te instantiëren en de lidvariabelen te vullen met geparseerde waarden uit het configuratiebestand. Dit zorgt ervoor dat alle vereiste afhankelijkheden aanwezig zijn wanneer het exemplaar van deze klasse wordt gemaakt en dat het schrijven van testcode in de toekomst mogelijk is.//use constructor injection for spring dependencies public CosmosSampleConfiguration(CosmosProperties properties){ this.properties = properties; }
We kunnen
properties
gebruiken om de URI en de sleutel op te halen voor het Azure Cosmos DB-account en omcosmosClientBuilder
te implementeren zoals hieronder wordt weergegeven:@Bean public CosmosClientBuilder cosmosClientBuilder() { DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig(); return new CosmosClientBuilder() .endpoint(properties.getUri()) .key(properties.getKey()) .directMode(directConnectionConfig); }
Deze implementatie
- Haalt de URI en de sleutel op van
properties
- Koppelt deze aan de opbouwmethoden
endpoint
enkey
- Hiermee configureert u ook de netwerkverbinding met de Azure Cosmos DB-service. (In de directe modus communiceert uw clienttoepassing rechtstreeks met de Azure Cosmos DB-partities in de back-end.)
- Haalt de URI en de sleutel op van
Ga terug naar CosmosSampleConfiguration.java en zoek de methode
getDatabaseName
:@Override protected String getDatabaseName() { return ""; }
Wijzig de standaardwaarde voor het retourneren in
"Users"
, de naam van uw database. Op deze manier wordt er verbinding gemaakt met de *Gebruikers-database wanneer Spring Data automatisch verbinding maakt met Azure Cosmos DB bij het opstarten.Ga naar WebCustomer.java. U ziet dat de klasse
WebCustomer
wordt voorafgegaan door de aantekening@Container
:@Container(containerName = "", ru = "")
@Container
neemt twee argumenten:containerName
: De naam van de Azure Cosmos DB-container (WebCustomers)ru
: de ingerichte doorvoer voor uw container. 400 RU/s is een goede standaardinstelling voor een Microsoft Learn-oefening.
Pas de
@Container
voor uw gebruiksvoorbeeld aan, zoals wordt weergegeven:@Data @NoArgsConstructor @AllArgsConstructor @Container(containerName = "WebCustomers", ru = "400") public class WebCustomer {
Uw Spring Data-project is op dit moment ingesteld voor interactie met Azure Cosmos DB. Vervolgens bouwt en voert u Hallo wereld uit. Ga naar src/main/java/com/azure/cosmos/examples/springexamples en open CosmosSample.java. Dit is een sjabloon voor de Spring Data-toepassing die we gaan ontwikkelen. Het ziet er ongeveer als volgt uit:
// 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."); } }
Met deze toepassingscode wordt een eenvoudige 'Hallo wereld' geïmplementeerd.
Als uw IDE hulpprogramma's biedt om uw Maven-toepassing te bouwen en uit te voeren: Bouw en voer uw toepassing uit met behulp van de IDE en controleer of de toepassing zich bij de terminal aanmeldt
Hello World
.Als u de terminal gebruikt om uw Maven-toepassing te bouwen en uit te voeren: gebruik de volgende opdracht om het Maven-project te bouwen:
mvn clean package
Voer vervolgens het volgende uit:
mvn spring-boot:run
Controleer of de toepassing de volgende uitvoer bij de terminal registreert, tussen alle andere uitvoer:
INFO: Hello World.
In deze eenheid hebt u het fundament voor uw Java-toepassing voor Azure Cosmos DB ingesteld. U hebt de Maven-toepassing aangepast en een eenvoudig 'Hallo wereld'-project uitgebreid om verbinding met het Azure Cosmos DB-eindpunt te maken.