Zugreifen auf Daten mit der Azure Cosmos DB NoSQL-API
In diesem Artikel erfahren Sie, wie Sie Spring Cloud Azure Starter for Spring Data for Azure Cosmos DB einer benutzerdefinierten Anwendung hinzufügen. Mit diesem Start können Sie Daten in Ihrer Azure Cosmos DB-Datenbank mithilfe von Spring Data und Azure Cosmos DB für NoSQL speichern und abrufen. Der Artikel zeigt Ihnen zunächst, wie Sie eine Azure Cosmos DB über das Azure-Portal erstellen. Anschließend wird in dem Artikel erläutert, wie Sie den Spring Initializr verwenden, um eine benutzerdefinierte Spring Boot-Anwendung zu erstellen, die Sie mit dem Spring Boot Starter nutzen können.
Azure Cosmos DB ist ein global verteilter Datenbankdienst, mit dem Entwickler mit verschiedenen Standard-APIs wie SQL, MongoDB, Graph und Tabellen-APIs arbeiten können. Der Spring Boot Starter von Microsoft ermöglicht Entwicklern die Verwendung von Spring Boot-Anwendungen, die problemlos in Azure Cosmos DB für NoSQL integriert werden können.
Voraussetzungen
Ein Azure-Abonnement – kostenlos eins erstellen.
Java Development Kit (JDK), Version 8 oder höher.
Erstellen einer Azure Cosmos DB mithilfe des Azure-Portals
Führen Sie die folgenden Schritte aus, um eine Azure Cosmos DB-Instanz zu erstellen:
Navigieren Sie zum Azure-Portal unter , und wählen Sie Ressource erstellen aus.
Wählen Sie Datenbanken und dann Azure Cosmos DB aus.
Wählen Sie auf dem Bildschirm Erstellen eines Azure Cosmos DB-Kontos die Option Azure Cosmos DB for NoSQL aus.
Geben Sie auf der Seite Azure Cosmos DB die folgenden Informationen ein:
- Wählen Sie das Abonnement, das Sie für Ihre Datenbank verwenden möchten.
- Geben Sie an, ob eine neue Ressourcengruppe für Die Datenbank erstellt werden soll, oder wählen Sie eine vorhandene Ressourcengruppe aus.
- Geben Sie einen eindeutigen Kontonamenein, den Sie als URI für Ihre Datenbank verwenden. Beispiel: contosoaccounttest.
- Geben Sie den Speicherort für Ihre Datenbank an.
- Wählen Sie Kostenlosen Tarifrabatt anwenden, wenn Sie ein Konto nur zu Demonstrationszwecken erstellen möchten.
- Lassen Sie die restlichen Standardoptionen und -einstellungen wie folgt übrig.
Wählen Sie Überprüfen und erstellen aus, überprüfen Sie die Spezifikationen, und wählen Sie Erstellen aus.
Wenn Ihre Datenbank erstellt wurde, wird Sie in Ihrem Azure-Dashboard sowie auf den Seiten Alle Ressourcen und Azure Cosmos DB aufgeführt. Informationen zum Erstellen einer Datenbank und eines Containers für ein neu erstelltes Azure Cosmos DB finden Sie im Abschnitt Hinzufügen einer Datenbank und eines Containers von Schnellstart: Erstellen eines Azure Cosmos DB-Kontos, einer Datenbank, eines Containers und von Elementen aus dem Azure-Portal. Sie können Ihre Datenbank für all diese Orte auswählen, um die Eigenschaftenseite für Ihren Cache zu öffnen.
Wenn die Eigenschaftenseite für Ihre Datenbank angezeigt wird, wählen Sie Schlüssel aus, und kopieren Sie die URI und die Zugriffsschlüssel für Ihre Datenbank. Sie verwenden diese Werte in Ihrer Spring Boot-Anwendung.
Wichtig
Weisen Sie in Ihrer neu erstellten Azure Cosmos DB die rolle Owner
dem Azure-Konto zu, das Sie derzeit verwenden. Weitere Informationen finden Sie unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals.
Erstellen Sie eine Spring Boot-Anwendung mit dem Spring Initializr
Führen Sie die folgenden Schritte aus, um ein neues Spring Boot-Anwendungsprojekt mit Azure-Unterstützung zu erstellen. Alternativ können Sie das Beispiel spring-cloud-azure-data-cosmos-sample im Repository azure-spring-boot-samples verwenden. Anschließend können Sie direkt mit dem Erstellen und Testen der App fortfahren.
Wechseln Sie zu https://start.spring.io/.
Geben Sie die folgenden Optionen an:
- Generieren Sie ein Maven-Projekt mit Java.
- Geben Sie Ihre Spring Boot-Version als 2.7.11 an.
- Geben Sie Namen für die Gruppe und das Artefakt für Ihre Anwendung an.
- Wählen Sie 17 für die Java-Version aus.
- Fügen Sie Azure Support zu den Abhängigkeiten hinzu.
Anmerkung
Spring Initializr verwendet zur Erstellung des Paketnamens die Namen für Gruppe und Artefakt (also beispielsweise com.example.wintiptoysdata).
Die Version von Spring Boot ist möglicherweise höher als die version, die vom Azure-Support unterstützt wird. Nachdem das Projekt automatisch generiert wurde, können Sie die Spring Boot-Version manuell in die höchste von Azure unterstützte Version ändern, die Sie in Spring-Versions-Mapping-finden können.
Wählen Sie nach Angabe der obigen Optionen GENERIEREN aus.
Wenn Sie dazu aufgefordert werden, laden Sie das Projekt auf einen Pfad auf Ihrem lokalen Computer herunter, und extrahieren Sie die Dateien.
Ihre einfache Spring Boot-Anwendung ist jetzt für die Bearbeitung bereit.
Konfigurieren Ihrer Spring Boot-Anwendung für die Verwendung des Azure Spring Boot Starter
Suchen Sie die pom.xml Datei im Verzeichnis Ihrer App; Zum Beispiel:
C:\SpringBoot\wingtiptoysdata\pom.xml
Oder
/users/example/home/wingtiptoysdata/pom.xml
Öffnen Sie die pom.xml Datei in einem Text-Editor, und fügen Sie dem
<dependencies>
-Element Folgendes hinzu:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId> </dependency>
Anmerkung
Weitere Informationen dazu, wie man die Spring Cloud Azure-Bibliotheksversionen mit einem BOM (Bill of Materials) verwaltet, finden Sie im Abschnitt Erste Schritte des Spring Cloud Azure-Entwicklerhandbuchs.
Speichern und schließen Sie die pom.xml Datei.
Konfigurieren Ihrer Spring Boot-Anwendung für die Verwendung Ihrer Azure Cosmos DB
Suchen Sie die Datei application.properties im Ressourcen-Verzeichnis Ihrer App. Beispiel:
C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties
Oder
/users/example/home/wingtiptoysdata/src/main/resources/application.properties
Öffnen Sie die application.properties Datei in einem Text-Editor, und fügen Sie der Datei die folgenden Zeilen hinzu, und ersetzen Sie die Beispielwerte durch die entsprechenden Eigenschaften für die Datenbank:
# 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
Speichern und schließen Sie die application.properties Datei.
Hinzufügen von Beispielcode zum Implementieren grundlegender Datenbankfunktionen
In diesem Abschnitt erstellen Sie zwei Java-Klassen zum Speichern von Benutzerdaten. Anschließend ändern Sie die Hauptanwendungsklasse, um eine Instanz der User
Klasse zu erstellen und in Ihrer Datenbank zu speichern.
Definieren einer Basisklasse zum Speichern von Benutzerdaten
Erstellen Sie eine neue Datei mit dem Namen User.java im selben Verzeichnis wie die Java-Hauptdatei der Anwendung.
Öffnen Sie die User.java Datei in einem Text-Editor, und fügen Sie der Datei die folgenden Zeilen hinzu, um eine generische Benutzerklasse zu definieren, die Werte in Ihrer Datenbank speichert und abruft:
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); } }
Speichern und schließen Sie die User.java Datei.
Definieren einer Datenrepositoryschnittstelle
Erstellen Sie eine neue Datei mit dem Namen UserRepository.java im selben Verzeichnis wie ihre Hauptanwendungs-Java-Datei.
Öffnen Sie die UserRepository.java Datei in einem Text-Editor, und fügen Sie der Datei die folgenden Zeilen hinzu, um eine Benutzeroberfläche zu definieren, die die Standardschnittstelle
ReactiveCosmosRepository
erweitert: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); }
Die
ReactiveCosmosRepository
Schnittstelle ersetzt dieDocumentDbRepository
Schnittstelle aus der vorherigen Version des Starters. Die neue Schnittstelle bietet synchrone und reaktive APIs für grundlegende Speicher-, Lösch- und Suchvorgänge.Speichern und schließen Sie die UserRepository.java Datei.
Ändern der Hauptanwendungsklasse
Suchen Sie die Java-Hauptdatei der Anwendung im Paketverzeichnis Ihrer Anwendung, z. B.:
C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java
Oder
/users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java
Öffnen Sie die Java-Hauptanwendungsdatei in einem Text-Editor, und fügen Sie der Datei die folgenden Zeilen hinzu:
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()); } }
Speichern und schließen Sie die Java-Hauptanwendungsdatei.
Erstellen und Testen Ihrer App
Öffnen Sie eine Eingabeaufforderung, und navigieren Sie zu dem Ordner, in dem sich Ihre pom.xml Datei befindet; Zum Beispiel:
cd C:\SpringBoot\wingtiptoysdata
Oder
cd /users/example/home/wingtiptoysdata
Verwenden Sie den folgenden Befehl, um Ihre Anwendung zu erstellen und auszuführen:
./mvnw clean
Dieser Befehl führt die Anwendung automatisch im Rahmen der Testphase aus. Sie können auch Folgendes verwenden:
./mvnw spring-boot:run
Nach einigen Erstellungs- und Testausgaben wird im Konsolenfenster etwa folgende Meldung angezeigt:
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
Diese Ausgabemeldungen deuten darauf hin, dass die Daten erfolgreich in Azure Cosmos DB gespeichert und dann erneut abgerufen wurden.
Bereinigen von Ressourcen
Wenn Sie diese Anwendung nicht weiterhin verwenden werden, müssen Sie die Ressourcengruppe löschen, die die zuvor erstellte Azure Cosmos DB enthält. Sie können die Ressourcengruppe aus dem Azure-Portal löschen.
Nächste Schritte
Um mehr über Spring und Azure zu erfahren, fahren Sie mit dem Spring on Azure-Dokumentationscenter fort.
Weitere Ressourcen
Weitere Informationen zur Verwendung von Azure Cosmos DB und Java finden Sie in den folgenden Artikeln:
Weitere Informationen zur Verwendung von Spring Boot-Anwendungen in Azure finden Sie in den folgenden Artikeln:
[Spring Cloud Azure Starter for Spring Data Azure Cosmos DB]
Bereitstellen einer Spring Boot-Anwendung auf Linux auf Azure App Service
Ausführen einer Spring Boot Application auf einem Kubernetes-Cluster im Azure Container Service
Weitere Informationen zum Einsatz von Azure mit Java finden Sie unter Azure für Java-Entwickler und Arbeiten mit Azure DevOps und Java.
Das Spring Framework ist eine Open-Source-Lösung, mit der Java-Entwickler Anwendungen auf Unternehmensebene erstellen können. Eines der beliebtesten Projekte, die auf dieser Plattform basieren, ist Spring Boot, der einen vereinfachten Ansatz zum Erstellen eigenständiger Java-Anwendungen bietet. Um Entwicklern bei den ersten Schritten mit Spring Boot zu helfen, stehen mehrere Beispiel-Spring Boot-Pakete unter https://github.com/spring-guides/zur Verfügung. Neben der Auswahl aus der Liste der grundlegenden Spring Boot-Projekte hilft der Spring Initializr Entwicklern bei den ersten Schritten beim Erstellen benutzerdefinierter Spring Boot-Anwendungen.