Verwenden von Spring Data-JDBC mit Azure Database for PostgreSQL
In diesem Lernprogramm wird veranschaulicht, wie Daten in einer Azure-Datenbank für PostgreSQL-Datenbank mithilfe von Spring Data ELEMENTS gespeichert werden.
JDBC ist die Standard-Java-API, um eine Verbindung mit herkömmlichen relationalen Datenbanken herzustellen.
In diesem Lernprogramm enthalten wir zwei Authentifizierungsmethoden: Microsoft Entra-Authentifizierung und PostgreSQL-Authentifizierung. Die Registerkarte Kennwortlos zeigt die Microsoft Entra-Authentifizierung und die Registerkarte Kennwort die PostgreSQL-Authentifizierung.
Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Database for PostgreSQL unter Verwendung von Identitäten, die in Microsoft Entra ID definiert sind. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.
Die PostgreSQL-Authentifizierung verwendet Konten, die in PostgreSQL gespeichert sind. Wenn Sie Kennwörter als Anmeldeinformationen für die Konten verwenden möchten, werden diese Anmeldeinformationen in der user
-Tabelle gespeichert. Da diese Kennwörter in PostgreSQL gespeichert sind, müssen Sie die Drehung der Kennwörter selbst verwalten.
Voraussetzungen
Azure-Abonnement (kostenloses Abonnement erstellen)
Java Development Kit (JDK), Version 8 oder höher.
Wenn Sie nicht über eine Spring Boot-Anwendung verfügen, erstellen Sie ein Maven-Projekt mit dem Spring Initializr. Wählen Sie "Maven Project" aus, und fügen Sie unter "Abhängigkeiten" die Abhängigkeiten Spring Web, Spring Data ROME und PostgreSQL-Treiber hinzu, und wählen Sie dann Die Java-Version 8 oder höher aus.
- Wenn Sie nicht über eine verfügen, erstellen Sie eine Azure-Datenbank für Die Flexible Server-Instanz von PostgreSQL mit dem Namen
postgresqlflexibletest
und einer Datenbank mit dem Namendemo
. Anweisungen finden Sie in der Schnellstartanleitung: Erstellen einer Azure-Datenbank für PostgreSQL – Flexibler Server im Azure-Portal.
Sehen Sie sich die Beispielanwendung an
In diesem Lernprogramm programmieren Sie eine Beispielanwendung. Wenn Sie schneller vorgehen möchten, ist diese Anwendung unter https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql bereits programmiert und verfügbar.
Konfigurieren einer Firewallregel für den PostgreSQL-Server
Azure Database for PostgreSQL-Instanzen sind standardmäßig gesichert. Sie besitzen eine Firewall, die keine eingehenden Verbindungen zulässt.
Um Ihre Datenbank verwenden zu können, öffnen Sie die Firewall des Servers, damit die lokale IP-Adresse auf den Datenbankserver zugreifen kann. Weitere Informationen finden Sie unter Firewallregeln in azure Database for PostgreSQL – Flexible Server.
Wenn Sie eine Verbindung mit Ihrem PostgreSQL-Server von Windows-Subsystem für Linux (WSL) auf einem Windows-Computer herstellen, müssen Sie der Firewall die WSL-Host-ID hinzufügen.
Erstellen eines PostgreSQL-Nicht-Administratorbenutzers und Erteilen von Berechtigungen
Erstellen Sie nun einen Nicht-Administratorbenutzer, und gewähren Sie ihm alle Berechtigungen für die Datenbank.
Sie können die folgende Methode verwenden, um einen Nicht-Administratorbenutzer zu erstellen, der eine kennwortlose Verbindung verwendet.
Verwenden Sie den folgenden Befehl, um die kennwortlose Service Connector-Erweiterung für die Azure CLI zu installieren:
az extension add --name serviceconnector-passwordless --upgrade
Verwenden Sie den folgenden Befehl, um den Nicht-Administratorbenutzer von Microsoft Entra zu erstellen:
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Wenn der Befehl abgeschlossen ist, notieren Sie sich den Benutzernamen in der Konsolenausgabe.
Speichern von Daten aus Azure-Datenbank für PostgreSQL
Nachdem Sie nun über eine Azure-Datenbank für Die Flexible Server-Instanz von PostgreSQL verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.
Um das Spring Cloud Azure Starter SQL-Modul ZU installieren, fügen Sie ihrer pom.xml Datei die folgenden Abhängigkeiten hinzu:
Die Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.14.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Hinweis
Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependencies
Version auf4.19.0
. Diese Stückliste (Bill of Material, BOM) sollte im<dependencyManagement>
Abschnitt Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud Azure-Abhängigkeiten dieselbe Version verwenden. Weitere Informationen zu der version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.Das Spring Cloud Azure Starter POSTGRESQL Artefakt:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Hinweis
Kennwortlose Verbindungen werden seit Version 4.5.0
unterstützt.
Konfigurieren von Spring Boot für die Verwendung von Azure Database for PostgreSQL
Führen Sie die folgenden Schritte aus, um Daten aus der Azure-Datenbank für PostgreSQL mithilfe von Spring Data DATASET ZU speichern:
Konfigurieren Sie Azure Database für PostgreSQL-Anmeldeinformationen, indem Sie der Konfigurationsdatei "application.properties" die folgenden Eigenschaften hinzufügen.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Warnung
Die Konfigurationseigenschaft
spring.sql.init.mode=always
bedeutet, dass Spring Boot automatisch ein Datenbankschema generiert, wobei die schema.sql Datei verwendet wird, die Sie als nächstes erstellen, jedes Mal, wenn der Server gestartet wird. Dieses Feature eignet sich hervorragend zum Testen, aber denken Sie daran, dass sie Ihre Daten bei jedem Neustart löscht, sodass Sie sie nicht in der Produktion verwenden sollten.
- Wenn Sie nicht über eine verfügen, erstellen Sie eine Azure-Datenbank für Die PostgreSQL Single Server-Instanz namens
postgresqlsingletest
und eine Datenbank mit dem Namendemo
. Anweisungen finden Sie in der Schnellstartanleitung: Erstellen einer Azure-Datenbank für PostgreSQL-Server mithilfe des Azure-Portal.
Sehen Sie sich die Beispielanwendung an
In diesem Artikel codierten Sie eine Beispielanwendung. Wenn Sie schneller vorgehen möchten, ist diese Anwendung unter https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql bereits programmiert und verfügbar.
Konfigurieren einer Firewallregel für den PostgreSQL-Server
Azure Database for PostgreSQL-Instanzen sind standardmäßig gesichert. Sie besitzen eine Firewall, die keine eingehenden Verbindungen zulässt.
Um Ihre Datenbank verwenden zu können, öffnen Sie die Firewall des Servers, damit die lokale IP-Adresse auf den Datenbankserver zugreifen kann. Weitere Informationen finden Sie unter Erstellen und Verwalten von Firewallregeln für Azure Database for PostgreSQL – Single Server using the Azure-Portal.
Wenn Sie eine Verbindung mit Ihrem PostgreSQL-Server von Windows-Subsystem für Linux (WSL) auf einem Windows-Computer herstellen, müssen Sie der Firewall die WSL-Host-ID hinzufügen.
Erstellen eines PostgreSQL-Nicht-Administratorbenutzers und Erteilen von Berechtigungen
Erstellen Sie nun einen Nicht-Administratorbenutzer, und gewähren Sie ihm alle Berechtigungen für die Datenbank.
Sie können die folgende Methode verwenden, um einen Nicht-Administratorbenutzer zu erstellen, der eine kennwortlose Verbindung verwendet.
Verwenden Sie den folgenden Befehl, um die kennwortlose Service Connector-Erweiterung für die Azure CLI zu installieren:
az extension add --name serviceconnector-passwordless --upgrade
Verwenden Sie den folgenden Befehl, um den Nicht-Administratorbenutzer von Microsoft Entra zu erstellen:
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Wenn der Befehl abgeschlossen ist, notieren Sie sich den Benutzernamen in der Konsolenausgabe.
Speichern von Daten aus Azure-Datenbank für PostgreSQL
Nachdem Sie nun über eine Azure-Datenbank für Eine Einzelne Serverinstanz von PostgreSQL verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.
Um das Spring Cloud Azure Starter SQL-Modul ZU installieren, fügen Sie ihrer pom.xml Datei die folgenden Abhängigkeiten hinzu:
Die Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.14.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Hinweis
Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependencies
Version auf4.19.0
. Diese Stückliste (Bill of Material, BOM) sollte im<dependencyManagement>
Abschnitt Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud Azure-Abhängigkeiten dieselbe Version verwenden. Weitere Informationen zu der version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.Das Spring Cloud Azure Starter POSTGRESQL Artefakt:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Hinweis
Kennwortlose Verbindungen werden seit Version 4.5.0
unterstützt.
Konfigurieren von Spring Boot für die Verwendung von Azure Database for PostgreSQL
Führen Sie die folgenden Schritte aus, um Daten aus der Azure-Datenbank für PostgreSQL mithilfe von Spring Data DATASET ZU speichern:
Konfigurieren Sie Azure Database für PostgreSQL-Anmeldeinformationen, indem Sie der Konfigurationsdatei "application.properties" die folgenden Eigenschaften hinzufügen.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Warnung
Die Konfigurationseigenschaft
spring.sql.init.mode=always
bedeutet, dass Spring Boot automatisch ein Datenbankschema generiert, wobei die schema.sql Datei verwendet wird, die Sie als nächstes erstellen, jedes Mal, wenn der Server gestartet wird. Dieses Feature eignet sich hervorragend zum Testen, aber denken Sie daran, dass sie Ihre Daten bei jedem Neustart löscht, sodass Sie sie nicht in der Produktion verwenden sollten.
Erstellen Sie die Konfigurationsdatei "src/main/resources/schema.sql ", um das Datenbankschema zu konfigurieren, und fügen Sie dann den folgenden Inhalt hinzu.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Erstellen Sie eine neue
Todo
Java-Klasse. Diese Klasse ist ein Domänenmodell, das dertodo
Tabelle zugeordnet ist, die automatisch vom Spring Boot erstellt wird. Der folgende Code ignoriert diegetters
undsetters
methoden.import org.springframework.data.annotation.Id; public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id private Long id; private String description; private String details; private boolean done; }
Bearbeiten Sie die Startklassendatei, um den folgenden Inhalt anzuzeigen.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.data.repository.CrudRepository; import java.util.stream.Stream; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) { return event->repository .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up correctly!", true)).toList()) .forEach(System.out::println); } } interface TodoRepository extends CrudRepository<Todo, Long> { }
Tipp
In diesem Lernprogramm gibt es keine Authentifizierungsvorgänge in den Konfigurationen oder im Code. Für die Verbindung mit Azure-Diensten ist jedoch eine Authentifizierung erforderlich. Um die Authentifizierung abzuschließen, müssen Sie Azure Identity verwenden. Spring Cloud Azure verwendet
DefaultAzureCredential
, die von der Azure Identity-Bibliothek bereitgestellt wird, um Anmeldeinformationen ohne Codeänderungen zu erhalten.„
DefaultAzureCredential
“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Mit diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (z. B. in lokalen und Produktionsumgebungen) verwenden, ohne umgebungsspezifischen Code zu implementieren. Weitere Informationen finden Sie unter DefaultAzureCredential.Um die Authentifizierung in lokalen Entwicklungsumgebungen abzuschließen, können Sie Azure CLI, Visual Studio Code, PowerShell oder andere Methoden verwenden. Weitere Informationen finden Sie unter Azure-Authentifizierung in Java-Entwicklungsumgebungen. Um die Authentifizierung in Azure-Hostingumgebungen abzuschließen, empfehlen wir die Verwendung der vom Benutzer zugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.
Starten Sie die Anwendung. Die Anwendung speichert Daten in der Datenbank. Es werden Protokolle ähnlich wie im folgenden Beispiel angezeigt:
2023-02-01 10:22:36.701 DEBUG 7948 --- [main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [INSERT INTO todo (description, details, done) VALUES (?, ?, ?)] com.example.demo.Todo@4bdb04c8
Bereitstellen in Azure Spring Apps
Nachdem Sie nun die Spring Boot-Anwendung lokal ausgeführt haben, ist es an der Zeit, sie in die Produktion zu verschieben. Azure Spring Apps erleichtert die Bereitstellung von Spring Boot-Anwendungen in Azure ohne Codeänderungen. Der Dienst verwaltet die Infrastruktur von Spring-Anwendungen und ermöglicht es Entwicklern dadurch, sich auf ihren Code zu konzentrieren. Azure Spring Apps bietet eine Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, Blau/Grün-Bereitstellungen und mehr. Informationen zum Bereitstellen Ihrer Anwendung in Azure Spring Apps finden Sie unter Bereitstellen Ihrer ersten Anwendung in Azure Spring Apps.
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für