Oefening: uw Java-app instellen met behulp van Maven

Voltooid

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.

  1. Meld u aan bij Azure Portal met hetzelfde account als waarmee u de sandbox hebt geactiveerd.
  2. 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.
  3. Maak in uw Azure Cosmos DB-account een database met de naam Gebruikers.
  4. 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

  1. 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
    
  2. 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.

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

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

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

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

  1. 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>";
    
  2. 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 sleutel elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ== 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.

  1. 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 en container 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 aantal import-instructies moet toevoegen om ervoor te zorgen dat de code werkt.

  2. Maak een private void-methode met de naam basicOperations zonder argumenten in de klasse.

  3. Voeg de volgende code toe om een CosmosAsyncClient-exemplaar te maken in de basicOperations-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();
    
  4. 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.
    
  5. Kopieer en plak de volgende code in de main methode en overschrijft de huidige logger.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.

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

  1. 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
    
  2. 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.

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

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

  2. 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 sleutel elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ== 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.

  1. 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 en queryMetricsEnabled. In application.properties kunt u zien dat de namen van de CosmosProperties-leden overeenkomen met de eigenschapsnamen van application.properties. De klasse CosmosProperties 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.

  2. Bekijk in CosmosSampleConfiguration.java de klasse CosmosSampleConfiguration en zoek de lege methode cosmosClientBuilder:

    @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 methode build() wordt aangeroepen, waarbij een exemplaar van CosmosAsyncClient wordt gemaakt op basis van de configuratie-instellingen die zijn opgenomen in de CosmosClientBuilder. U kunt deze methode gebruiken om de CosmosClientBuilder te configureren met behulp van opbouwmethoden.

  3. 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 om cosmosClientBuilder 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

    1. Haalt de URI en de sleutel op van properties
    2. Koppelt deze aan de opbouwmethoden endpoint en key
    3. 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.)
  4. 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.

  5. 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 {
    
  6. 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.

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

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