Přístup k datům pomocí rozhraní API NoSQL služby Azure Cosmos DB

V tomto článku se dozvíte, jak do vlastní aplikace přidat Spring Cloud Azure Starter for Spring Data for Azure Cosmos DB . Tato úvodní sada umožňuje ukládat data do databáze Azure Cosmos DB a načítat je z databáze Azure Cosmos DB pomocí Spring Data a Azure Cosmos DB for NoSQL. Tento článek začíná tím, že vám ukáže, jak vytvořit službu Azure Cosmos DB prostřednictvím webu Azure Portal. V tomto článku se dozvíte, jak pomocí aplikace Spring Initializr vytvořit vlastní aplikaci Spring Boot, kterou můžete použít s úvodní aplikací Spring Boot.

Azure Cosmos DB je globálně distribuovaná databázová služba, která vývojářům umožňuje pracovat s daty pomocí různých standardních rozhraní API, jako jsou SQL, MongoDB, Graph a Table API. Úvodní sada Spring Boot od Microsoftu umožňuje vývojářům používat aplikace Spring Boot, které se snadno integrují se službou Azure Cosmos DB for NoSQL.

Požadavky

Vytvoření služby Azure Cosmos DB pomocí webu Azure Portal

K vytvoření instance služby Azure Cosmos DB použijte následující postup:

  1. Přejděte na web Azure Portal a vyberte Vytvořit prostředek.

  2. Vyberte Databáze a pak vyberte Azure Cosmos DB.

  3. Na obrazovce Vytvořit účet služby Azure Cosmos DB vyberte Azure Cosmos DB for NoSQL.

    Snímek obrazovky webu Azure Portal se zvýrazněnou možností Vytvořit účet služby Azure Cosmos DB se zvýrazněnou možností Azure Cosmos DB for NoSQL

  4. Na stránce Azure Cosmos DB zadejte následující informace:

    • Zvolte Předplatné, které chcete použít pro svou databázi.
    • Určete, že chcete pro databázi vytvořit novou skupinu prostředků, nebo zvolte existující skupinu.
    • Zadejte jedinečný název účtu, který použijete jako identifikátor URI pro vaši databázi. Příklad: contosoaccounttest.
    • Zadejte Umístění databáze.
    • Pokud chcete vytvořit účet pouze pro demonstrační účely, vyberte Možnost Použít slevu úrovně Free.
    • Ponechte zbývající výchozí možnosti a nastavení tak, jak jsou.
  5. Vyberte Zkontrolovat a vytvořit, zkontrolujte specifikace a vyberte Vytvořit.

    Snímek obrazovky webu Azure Portal se stránkou Vytvořit účet služby Azure Cosmos DB s nastavením Azure Cosmos DB for NoSQL

  6. Po vytvoření se databáze zobrazí na řídicím panelu Azure a na stránkách Všechny prostředky a Azure Cosmos DB. Pokud chcete vytvořit databázi a kontejner pro nově vytvořenou službu Azure Cosmos DB, přečtěte si část Rychlý start přidání databáze a kontejneru: Vytvoření účtu služby Azure Cosmos DB, databáze, kontejneru a položek z webu Azure Portal. Pro každé z těchto umístění můžete vybrat databázi a otevřít stránku vlastností vaší mezipaměti.

  7. Když se zobrazí stránka vlastností databáze, vyberte Klíče a zkopírujte identifikátor URI a přístupové klíče pro vaši databázi. Tyto hodnoty použijete v aplikaci Spring Boot.

    Snímek obrazovky webu Azure Portal zobrazující účet služby Azure Cosmos DB se stránkou Klíče

Důležité

V nově vytvořené službě Azure Cosmos DB přiřaďte Owner roli k účtu Azure, který právě používáte. Další informace viz Přiřazení rolí Azure pomocí webu Azure Portal.

Vytvoření aplikace Spring Boot pomocí aplikace Spring Initializr

Pomocí následujícího postupu vytvořte nový projekt aplikace Spring Boot s podporou Azure. Alternativně můžete použít ukázku spring-cloud-azure-data-cosmos-sample v úložišti azure-spring-boot-samples . Pak můžete přeskočit přímo k sestavení a otestování aplikace.

  1. Přejděte na https://start.spring.io/.

  2. Zadejte následující možnosti:

    • Vygenerujte projekt Maven v Javě.
    • Zadejte verzi Spring Bootu na verzi 2.7.11.
    • Zadejte názvy skupiny (Group) a artefaktu (Artifact) pro vaši aplikaci.
    • Jako verzi Javy vyberte 17 .
    • Přidejte podporu Azure do závislostí.

    Poznámka:

    Spring Initializr používá k vytvoření názvu balíčku názvy Group a Artifact , například com.example.wingtiptoysdata.

    Verze Spring Bootu může být vyšší než verze podporovaná podporou Azure. Po automatickém vygenerování projektu můžete ručně změnit verzi Spring Boot na nejvyšší podporovanou verzi Azure, kterou najdete v mapování spring-versions.

  3. Po zadání výše uvedených možností vyberte GENEROVAT.

  4. Po zobrazení výzvy stáhněte projekt na místní počítač a extrahujte soubory.

Vaše jednoduchá aplikace Spring Boot je teď připravená k úpravám.

Konfigurace aplikace Spring Boot pro použití úvodní sady Spring Boot pro Azure

  1. V adresáři vaší aplikace vyhledejte soubor pom.xml. Například:

    C:\SpringBoot\wingtiptoysdata\pom.xml

    nebo

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

  2. Otevřete soubor pom.xml v textovém editoru a do elementu <dependencies> přidejte následující kód:

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

    Poznámka:

    Další informace o správě verzí knihovny Azure Spring Cloud pomocí kusovníku najdete v části Začínáme s příručkou pro vývojáře Spring Cloud Azure.

  3. Uložte a zavřete soubor pom.xml.

Konfigurace aplikace Spring Boot pro použití služby Azure Cosmos DB

  1. V adresáři resources vaší aplikace vyhledejte soubor application.properties. Například:

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

    nebo

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

  2. Otevřete soubor application.properties v textovém editoru a přidejte do něj následující řádky, přičemž nahraďte ukázkové hodnoty odpovídajícími vlastnostmi pro vaši databázi:

    # Specify the DNS URI of your Azure Cosmos DB.
    spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/
    
    # Specify the name of your database.
    spring.cloud.azure.cosmos.database=contosoaccounttest
    spring.cloud.azure.cosmos.populate-query-metrics=true
    
  3. Uložte a zavřete soubor application.properties.

Přidání vzorového kódu pro implementaci základních databázových funkcí

V této části vytvoříte dvě třídy Javy pro ukládání uživatelských dat. Potom upravíte hlavní třídu aplikace tak, aby vytvořila instanci User třídy a uložila ji do databáze.

Definice základní třídy pro ukládání uživatelských dat

  1. Ve stejném adresáři, ve kterém se nachází hlavní soubor Java vaší aplikace, vytvořte nový soubor User.java.

  2. Otevřete soubor User.java v textovém editoru a přidejte do něj následující řádky definující obecnou třídu uživatele, která ukládá hodnoty ve vaší databázi a načítá je z ní:

    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. Uložte a zavřete soubor User.java.

Definice rozhraní úložiště dat

  1. Ve stejném adresáři, ve kterém se nachází hlavní soubor Java vaší aplikace, vytvořte nový soubor UserRepository.java.

  2. Otevřete soubor UserRepository.java v textovém editoru a přidejte do něj následující řádky definující rozhraní úložiště uživatele, které rozšiřuje výchozí rozhraní 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);
    }
    

    Rozhraní ReactiveCosmosRepository nahrazuje rozhraní DocumentDbRepository z předchozí verze úvodní sady. Nové rozhraní poskytuje synchronní a reaktivní rozhraní API pro základní operace ukládání, odstraňování a vyhledávání.

  3. Uložte a zavřete soubor UserRepository.java.

Úprava hlavní třídy aplikace

  1. V adresáři balíčku vaší aplikace vyhledejte hlavní soubor Java aplikace. Například:

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

    nebo

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

  2. Otevřete hlavní soubor Java aplikace v textovém editoru a přidejte do něj následující řádky:

    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. Uložte a zavřete hlavní soubor Java aplikace.

Sestavení a otestování aplikace

  1. Otevřete příkazový řádek a přejděte do složky, ve které se nachází váš soubor pom.xml. Například:

    cd C:\SpringBoot\wingtiptoysdata

    nebo

    cd /users/example/home/wingtiptoysdata

  2. Pomocí následujícího příkazu aplikaci sestavte a spusťte:

    ./mvnw clean
    

    Tento příkaz aplikaci automaticky spustí ve fázi testování. Můžete použít také tento příkaz:

    ./mvnw spring-boot:run
    

    Po nějakém výstupu sestavení a testu se v okně konzoly zobrazí zpráva podobná následujícímu příkladu:

    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
    

    Tyto výstupní zprávy ukazují, že se data úspěšně uložila do služby Azure Cosmos DB a pak se znovu načetla.

Vyčištění prostředků

Pokud tuto aplikaci nebudete dál používat, nezapomeňte odstranit skupinu prostředků obsahující službu Azure Cosmos DB, kterou jste vytvořili dříve. Skupinu prostředků můžete odstranit z webu Azure Portal.

Další kroky

Pokud se chcete dozvědět více o architektuře Spring a Azure, přejděte do centra dokumentace Spring v Azure.

Další materiály

Další informace o používání služby Azure Cosmos DB a Javy najdete v následujících článcích:

Další informace o používání aplikací Spring Boot v Azure najdete v následujících článcích:

Další informace o používání Javy v Azure najdete na webech Azure pro vývojáře v Javě a Práce s Azure DevOps a Javou.

Spring Framework je open source řešení, které pomáhá vývojářům v Javě vytvářet aplikace na podnikové úrovni. Jedním z nejoblíbenějších projektů vytvořených s využitím této platformy je architektura Spring Boot, která nabízí zjednodušený přístup k vytváření samostatných aplikací v jazyce Java. Na adrese https://github.com/spring-guides/ je k dispozici několik ukázkových balíčků Spring Boot, které vývojářům pomůžou začít s architekturou Spring Boot. Kromě možnosti výběru ze seznamu základních projektů Spring Boot může vývojářům pomoct začít vytvářet vlastní aplikace Spring Boot i aplikace Spring Initializr.