Dela via


Komma åt data med Azure Cosmos DB NoSQL API

Den här artikeln visar hur du lägger till Spring Cloud Azure Starter för Spring Data för Azure Cosmos DB i ett anpassat program. Med den här startprogrammet kan du lagra data i och hämta data från din Azure Cosmos DB-databas med hjälp av Spring Data och Azure Cosmos DB för NoSQL. Artikeln börjar med att visa hur du skapar en Azure Cosmos DB via Azure-portalen. Sedan visar artikeln hur du använder Spring Initializr för att skapa ett anpassat Spring Boot-program som du kan använda med Spring Boot Starter.

Azure Cosmos DB är en globalt distribuerad databastjänst som gör att utvecklare kan arbeta med data med hjälp av olika standard-API:er, till exempel SQL, MongoDB, Graph och Tabell-API:er. Med Microsofts Spring Boot Starter kan utvecklare använda Spring Boot-program som enkelt kan integreras med Azure Cosmos DB för NoSQL.

Förutsättningar

Skapa en Azure Cosmos DB med hjälp av Azure-portalen

Använd följande steg för att skapa en Azure Cosmos DB-instans:

  1. Bläddra till Azure-portalen och välj Skapa en resurs.

  2. Välj Databaseroch välj sedan Azure Cosmos DB.

  3. På skärmen Skapa ett Azure Cosmos DB-konto väljer du Azure Cosmos DB för NoSQL.

    Skärmbild av Azure-portalen som visar alternativet Skapa ett Azure Cosmos DB-konto med Azure Cosmos DB för NoSQL markerat.

  4. På sidan Azure Cosmos DB anger du följande information:

    • Välj den prenumeration som du vill använda för din databas.
    • Ange om du vill skapa en ny resursgrupp för databasen eller välja en befintlig resursgrupp.
    • Ange ett unikt kontonamn, som du använder som URI för databasen. Till exempel: contosoaccounttest.
    • Ange platsen för din databas.
    • Välj Använd rabatt på den kostnadsfria nivån om du bara vill skapa ett konto i demonstrationssyfte.
    • Låt resten av standardalternativen och inställningarna vara kvar.
  5. Välj Granska + skapa, granska dina specifikationer och välj Skapa.

    Skärmbild av Azure-portalen som visar sidan Skapa Azure Cosmos DB-konto med Azure Cosmos DB för NoSQL-inställningar.

  6. När databasen har skapats visas den på din Azure -instrumentpaneloch under sidorna Alla resurser och Azure Cosmos DB. Information om hur du skapar en databas och en container för en nyligen skapad Azure Cosmos DB finns i avsnittet Lägg till en databas och en container i Snabbstart: Skapa ett Azure Cosmos DB-konto, en databas, en container och objekt från Azure-portalen. Du kan välja din databas för någon av dessa platser för att öppna egenskapssidan för cachen.

  7. När egenskapssidan för databasen visas väljer du Nycklar och kopierar din URI och åtkomstnycklar för databasen. Du använder dessa värden i ditt Spring Boot-program.

    Skärmbild av Azure-portalen som visar Azure Cosmos DB-kontot med sidan Nycklar.

Viktig

I din nyligen skapade Azure Cosmos DB tilldelar du rollen Owner till det Azure-konto som du använder för närvarande. Mer information finns i Tilldela Azure-roller med hjälp av Azure-portalen.

Skapa ett Spring Boot-program med Spring Initializr

Använd följande steg för att skapa ett nytt Spring Boot-programprojekt med Azure-support. Alternativt kan du använda spring-cloud-azure-data-cosmos-sample-exempel i azure-spring-boot-samples-repository. Sedan kan du hoppa direkt till Skapa och testa din app.

  1. Bläddra till https://start.spring.io/.

  2. Ange följande alternativ:

    • Generera ett Maven--projekt med Java-.
    • Ange din Spring Boot version till 2.7.11.
    • Ange namnen Group och Artifact för ditt program.
    • Välj 17 för Java-versionen.
    • Lägg till Azure Support- i beroendena.

    Anteckning

    Spring Initializr använder namnen Group och Artifact för att skapa paketnamnet. till exempel: com.example.wingtiptoysdata.

    Versionen av Spring Boot kan vara högre än den version som stöds av Azure Support. När projektet har genererats automatiskt kan du manuellt ändra Spring Boot-versionen till den högsta version som stöds av Azure, som du hittar i Spring-Versions-Mapping.

  3. När du har angett alternativen som angavs tidigare väljer du GENERERA.

  4. När du uppmanas att göra det laddar du ned projektet till en sökväg på den lokala datorn och extraherar filerna.

Ditt enkla Spring Boot-program är nu redo för redigering.

Konfigurera spring boot-programmet så att det använder Azure Spring Boot Starter

  1. Leta upp filen pom.xml i katalogen för din app. till exempel:

    C:\SpringBoot\wingtiptoysdata\pom.xml

    -eller-

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

  2. Öppna filen pom.xml i en textredigerare och lägg till följande i elementet <dependencies>:

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

    Not

    Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturlista (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

  3. Spara och stäng filen pom.xml.

Konfigurera Spring Boot-programmet så att det använder Azure Cosmos DB

  1. Leta upp filen application.properties i katalogen resurser i appen. till exempel:

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

    -eller-

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

  2. Öppna filen application.properties i en textredigerare och lägg till följande rader i filen och ersätt exempelvärdena med lämpliga egenskaper för databasen:

    # 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. Spara och stäng filen application.properties.

Lägga till exempelkod för att implementera grundläggande databasfunktioner

I det här avsnittet skapar du två Java-klasser för att lagra användardata. Sedan ändrar du huvudprogramklassen för att skapa en instans av klassen User och spara den i databasen.

Definiera en basklass för lagring av användardata

  1. Skapa en ny fil med namnet User.java i samma katalog som huvudprogrammets Java-fil.

  2. Öppna filen User.java i en textredigerare och lägg till följande rader i filen för att definiera en allmän användarklass som lagrar och hämtar värden i databasen:

    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. Spara och stäng filen User.java.

Definiera ett datalagringsplatsgränssnitt

  1. Skapa en ny fil med namnet UserRepository.java i samma katalog som huvudprogrammets Java-fil.

  2. Öppna filen UserRepository.java i en textredigerare och lägg till följande rader i filen för att definiera ett användarlagringsplatsgränssnitt som utökar standardgränssnittet för 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);
    }
    

    Gränssnittet ReactiveCosmosRepository ersätter DocumentDbRepository-gränssnittet från den tidigare versionen av startprogrammet. Det nya gränssnittet innehåller synkrona och reaktiva API:er för grundläggande åtgärder för att spara, ta bort och hitta.

  3. Spara och stäng filen UserRepository.java.

Ändra huvudprogramklassen

  1. Leta upp huvudprogrammets Java-fil i programmets paketkatalog, till exempel:

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

    -eller-

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

  2. Öppna huvudprogrammets Java-fil i en textredigerare och lägg till följande rader i filen:

    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. Spara och stäng java-huvudprogrammets fil.

Skapa och testa din app

  1. Öppna en kommandotolk och navigera till mappen där din pom.xml-fil finns. till exempel:

    cd C:\SpringBoot\wingtiptoysdata

    -eller-

    cd /users/example/home/wingtiptoysdata

  2. Använd följande kommando för att skapa och köra ditt program:

    ./mvnw clean
    

    Det här kommandot kör programmet automatiskt som en del av testfasen. Du kan också använda:

    ./mvnw spring-boot:run
    

    Efter några bygg- och testutdata visar konsolfönstret ett meddelande som liknar följande exempel:

    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
    

    Dessa utdatameddelanden anger att data har sparats till Azure Cosmos DB och sedan hämtats igen.

Rensa resurser

Om du inte kommer att fortsätta att använda det här programmet måste du ta bort resursgruppen som innehåller Azure Cosmos DB som du skapade tidigare. Du kan ta bort resursgruppen från Azure-portalen.

Nästa steg

Om du vill veta mer om Spring och Azure fortsätter du till dokumentationscentret för Spring on Azure.

Fler resurser

Mer information om hur du använder Azure Cosmos DB och Java finns i följande artiklar:

Mer information om hur du använder Spring Boot-program i Azure finns i följande artiklar:

Mer information om hur du använder Azure med Java finns i Azure for Java Developers och Working with Azure DevOps and Java.

Spring Framework- är en lösning med öppen källkod som hjälper Java-utvecklare att skapa program på företagsnivå. Ett av de mer populära projekten som bygger på den plattformen är Spring Boot, som ger en förenklad metod för att skapa fristående Java-program. För att hjälpa utvecklare att komma igång med Spring Boot finns flera Spring Boot-exempelpaket tillgängliga på https://github.com/spring-guides/. Förutom att välja från listan över grundläggande Spring Boot-projekt hjälper Spring Initializr utvecklare att komma igång med att skapa anpassade Spring Boot-program.