Freigeben über


Verwenden von Spring Data JPA mit Azure SQL Database

In diesem Lernprogramm wird das Speichern von Daten in Azure SQL Database mithilfe von Spring Data JPA veranschaulicht.

Die Java Persistenz-API (JPA) ist die Standard-Java-API für objektrelationale Zuordnung.

In diesem Lernprogramm enthalten wir zwei Authentifizierungsmethoden: Microsoft Entra Authentifizierung und SQL-Datenbankauthentifizierung. Auf der Registerkarte "Kennwortlos" wird die Microsoft Entra-Authentifizierung angezeigt, und auf der Registerkarte "Kennwort" wird die SQL-Datenbankauthentifizierung angezeigt.

Microsoft Entra Authentifizierung bietet einen Mechanismus zum Herstellen einer Verbindung mit der Azure SQL-Datenbank mithilfe von Identitäten, die in Microsoft Entra ID definiert werden. Mit Microsoft Entra Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.

SQL-Datenbank-Authentifizierung verwendet Konten, die in SQL-Datenbank gespeichert sind. Wenn Sie sich dafür entscheiden, Kennwörter als Anmeldeinformationen für die Konten zu verwenden, werden diese Anmeldeinformationen in der Benutzertabelle gespeichert. Da diese Kennwörter in SQL-Datenbank gespeichert werden, müssen Sie die Rotation der Kennwörter selbst verwalten.

Voraussetzungen

  • SQLCMD-Hilfsprogramm

  • ODBC-Treiber 17 oder 18.

  • Wenn Sie nicht über eine Instanz verfügen, erstellen Sie eine Azure SQL Server-Instanz namens sqlservertest und eine Datenbank mit dem Namen demo. Anweisungen finden Sie unter Quickstart: Erstellen einer einzelnen Datenbank – Azure SQL Database.

  • 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, fügen Sie dann unter Dependencies die Abhängigkeiten Spring Web, Spring Data JPA und MS SQL Server Treiber hinzu und wählen Sie schließlich Java Version 8 oder höher aus.

Wichtig

Um kennwortlose Verbindungen zu verwenden, aktualisieren Sie MS SQL Server Treiber auf Version 12.1.0 oder höher, und erstellen Sie dann einen Microsoft Entra Administratorbenutzer für Ihre Azure SQL Database Serverinstanz. Weitere Informationen finden Sie im Abschnitt Create a Microsoft Entra admin des Tutorial: Secure a database in Azure SQL Database.

Siehe die Beispielanwendung

In diesem Tutorial codieren Sie eine Beispielanwendung. Wenn Sie schneller gehen möchten, ist diese Anwendung bereits codiert und unter https://github.com/Azure-Samples/quickstart-spring-data-jpa-sql-server verfügbar.

Konfigurieren einer Firewallregel für Ihren Azure SQL Database-Server

Azure SQL Database 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 Tutorial: Sichern einer Datenbank in Azure SQL Database.

Wenn Sie eine Verbindung mit Ihrem Azure SQL Database Server von Windows Subsystem for Linux (WSL) auf einem Windows Computer herstellen, müssen Sie der Firewall die WSL-Host-ID hinzufügen.

Erstellen eines SQL-Datenbankbenutzers ohne Administratorrechte und Erteilen von Berechtigungen

In diesem Schritt wird ein Benutzer ohne Administratorrechte erstellt und ihm alle Berechtigungen für die demo Datenbank erteilt.

Informationen zur Verwendung kennwortloser Verbindungen finden Sie unter Tutorial: Sichern einer Datenbank in Azure SQL Database oder verwenden Sie Service Connector, um einen Microsoft Entra Administratorbenutzer für Ihren Azure SQL Database Server zu erstellen, wie in den folgenden Schritten gezeigt:

  1. Installieren Sie zunächst den Service Connector kennwortlose Erweiterung für die Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Verwenden Sie dann den folgenden Befehl, um den Microsoft Entra Nicht-Administratorbenutzer zu erstellen:

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

Der von Ihnen erstellte Microsoft Entra Administrator ist ein SQL-Datenbankadministratorbenutzer, sodass Sie keinen neuen Benutzer erstellen müssen.

Wichtig

Azure SQL Kennwortlose Datenbankverbindungen erfordern ein Upgrade des MS SQL Server Driver auf version 12.1.0 oder höher. Die Verbindungsoption befindet sich authentication=DefaultAzureCredential in Version 12.1.0 und authentication=ActiveDirectoryDefault in Version 12.2.0.

Speichern von Daten aus Azure SQL Database

Mit einer Azure SQL Database Instanz können Sie Daten mithilfe von Spring Cloud Azure speichern.

Um das Spring Cloud Azure Starter-Modul zu installieren, fügen Sie der Datei pom.xml 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>7.1.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Hinweis

    Wenn Sie Spring Boot 4.0.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 7.1.0festlegen.

    Wenn Sie Spring Boot 3.5.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 6.1.0festlegen.

    Wenn Sie Spring Boot 3.1.x-3.5.x verwenden, stellen Sie sicher, dass Sie die Version spring-cloud-azure-dependencies auf 5.25.0 setzen.

    Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 4.20.0 festlegen.

    Diese Stückliste (Bill of Material, BOM) sollte im Abschnitt <dependencyManagement> Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud-Azure Abhängigkeiten dieselbe Version verwenden.

    Weitere Informationen zur version, die für diese BOM verwendet wird, finden Sie unter Which Version of Spring Cloud Azure Should I Use.

  • Das Spring Cloud Azure Starter-Artefakt:

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

    Hinweis

    Da es sich um eine Abhängigkeit handelt, sollte sie im <dependencies> Abschnitt der pom.xmlhinzugefügt werden. Die Version ist hier nicht konfiguriert, da sie von der zuvor hinzugefügten BOM verwaltet wird.

Konfigurieren von Spring Boot zur Nutzung von Azure SQL Database

Um Daten aus einer Azure SQL-Datenbank mit Spring Data JPA zu speichern, führen Sie die folgenden Schritte aus, um die Anwendung zu konfigurieren:

  1. Konfigurieren Sie die Anmeldeinformationen für die Azure SQL-Datenbank in der Konfigurationsdatei application.properties.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2016Dialect
    spring.jpa.hibernate.ddl-auto=create-drop
    

    Warnung

    Die Konfigurationseigenschaft spring.jpa.hibernate.ddl-auto=create-drop bedeutet, dass Spring Boot beim Start der Anwendung automatisch ein Datenbankschema erstellt und versucht, dieses beim Herunterfahren zu löschen. 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 eine neue Todo Java Klasse. Diese Klasse ist ein Domänenmodell, das in der todo Tabelle zugeordnet wird, die automatisch von JPA erstellt wird. Der folgende Code ignoriert die getters- und setters-Methoden:

    package com.example.demo;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        @GeneratedValue
        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.jpa.repository.JpaRepository;
    
    import java.util.stream.Collectors;
    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)).collect(Collectors.toList()))
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends JpaRepository<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 die Azure Identity-Bibliothek bereitstellt, 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 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 der vom Benutzer zugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?

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

    2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?)
    com.example.demo.Todo@1f
    

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 auf 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 Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, blaugrünen Bereitstellungen und mehr. Informationen zum Bereitstellen Ihrer Anwendung auf Azure Spring Apps finden Sie unter Deploy your first application to Azure Spring Apps.

Nächste Schritte