Teilen über


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-JDBC gespeichert werden.

JDBC ist die Standard-Java-API, um eine Verbindung mit herkömmlichen relationalen Datenbanken herzustellen.

In diesem Tutorial werden zwei Authentifizierungsmethoden vorgestellt: die Microsoft Entra Authentifizierung und die 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 Rotation der Kennwörter selbst verwalten.

Voraussetzungen

  • PostgreSQL-Befehlszeilenclient.

  • Wenn Sie über keine Spring Boot-Anwendung verfügen, erstellen Sie mit Spring Initializr ein Maven-Projekt. Achten Sie darauf, Maven-Projekt auszuwählen, fügen Sie unter Abhängigkeiten die Abhängigkeit Spring Web, Spring Data-JDBC und PostgreSQL Driver hinzu, und wählen Sie dann Java-Version 8 oder höher aus.

Siehe die Beispielanwendung

In diesem Tutorial codieren 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 nutzen 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 – flexibler Server.

Wenn Sie über das Windows-Subsystem für Linux (WSL) auf einem Windows-Computer eine Verbindung mit Ihrem PostgreSQL-Server 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.

  1. 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
    
  2. Verwenden Sie den folgenden Befehl, um den Microsoft Entra Nicht-Administratorbenutzer 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 Database for PostgreSQL

Nachdem Sie nun über eine Azure Database for PostgreSQL flexible Server-Instanz verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.

Um das Spring Cloud Azure Starter JDBC PostgreSQL-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.16.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 auf 4.19.0 festlegen. 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 JDBC 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 Database for PostgreSQL mithilfe von Spring Data-JDBC zu speichern:

  1. Konfigurieren Sie Azure Database for 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 mithilfe der Datei schema.sql, die Sie später erstellen, bei jedem Start des Servers automatisch ein Datenbankschema generiert. Dieses Feature eignet sich hervorragend für Tests. Denken Sie jedoch daran, dass Ihre Daten bei jedem Neustart gelöscht werden, daher sollte diese Eigenschaft nicht in der Produktion verwendet werden.

Siehe die Beispielanwendung

In diesem Artikel wird eine Beispielanwendung codiert. 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 nutzen 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 – Einzelserver mit dem Azure-Portal.

Wenn Sie über das Windows-Subsystem für Linux (WSL) auf einem Windows-Computer eine Verbindung mit Ihrem PostgreSQL-Server 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.

  1. 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
    
  2. Verwenden Sie den folgenden Befehl, um den Microsoft Entra Nicht-Administratorbenutzer 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 Database for PostgreSQL

Nachdem Sie nun über eine Azure Database for PostgreSQL Einzelserver-Instanz verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.

Um das Spring Cloud Azure Starter JDBC PostgreSQL-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.16.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 auf 4.19.0 festlegen. 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 JDBC 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 Database for PostgreSQL mithilfe von Spring Data-JDBC zu speichern:

  1. Konfigurieren Sie Azure Database for 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 mithilfe der Datei schema.sql, die Sie später erstellen, bei jedem Start des Servers automatisch ein Datenbankschema generiert. Dieses Feature eignet sich hervorragend für Tests. Denken Sie jedoch daran, dass Ihre Daten bei jedem Neustart gelöscht werden, daher sollte diese Eigenschaft nicht in der Produktion verwendet werden.

  1. 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);
    
  1. Erstellen Sie eine neue Todo Java-Klasse. Diese Klasse ist ein Domänenmodell, das in der todo Tabelle zugeordnet wird, die automatisch von Spring Boot erstellt wird. Der folgende Code ignoriert die getters- und setters-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;
    
    }
    
  2. 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 dem Azure-Diensten ist jedoch eine Authentifizierung erforderlich. Um die Authentifizierung abzuschließen, müssen Sie Azure Identity verwenden. Spring Cloud Azure verwendet DefaultAzureCredential, was die Azure Identity-Bibliothek bereitstellt, um Sie beim Abrufen von Anmeldeinformationen ohne Codeänderungen zu unterstützen.

    DefaultAzureCredential“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Mit diesem Ansatz kann Ihre Anwendung verschiedene Authentifizierungsmethoden in unterschiedlichen Umgebungen verwenden (z. B. in lokalen oder Produktionsumgebungen), ohne dass umgebungsspezifischer Code implementiert werden muss. 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 einer benutzerzugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

  3. Starten Sie die Anwendung. Die Anwendung speichert Daten in der Datenbank. Ihnen wird daraufhin Protokolle angezeigt, die in etwa wie im folgenden Beispiel aussehen:

    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. Mit Azure Spring Apps lassen sich Spring Boot-Anwendungen ganz einfach und ohne Codeänderungen in Azure bereitstellen. 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