Verwenden von Spring Data-JDBC mit Azure SQL-Datenbank

In diesem Lernprogramm wird das Speichern von Daten in Azure SQL-Datenbank mithilfe von Spring Data DATASET VERANSCHAULICHT.

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 SQL-Datenbank Authentifizierung. Auf der Registerkarte "Kennwortlos" werden die Microsoft Entra-Authentifizierung und die Registerkarte "Kennwort" die SQL-Datenbank Authentifizierung angezeigt.

Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit der Azure-Datenbank für SQL-Datenbank mithilfe von Identitäten, die in der 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.

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

Voraussetzungen

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-sql-server bereits programmiert und verfügbar.

Konfigurieren einer Firewallregel für den Azure SQL-Datenbank-Server

Azure SQL-Datenbankinstanzen 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 im Lernprogramm: Sichern einer Datenbank in Azure SQL-Datenbank.

Wenn Sie eine Verbindung mit Ihrem Azure SQL-Datenbank 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 einer SQL-Datenbank, die kein Administrator ist, und Erteilen von Berechtigungen

In diesem Schritt wird ein Nicht-Administrator-Benutzer erstellt und ihm alle Berechtigungen für die demo Datenbank erteilt.

Informationen zur Verwendung kennwortloser Verbindungen finden Sie im Lernprogramm: Sichern einer Datenbank in Azure SQL-Datenbank oder Verwenden von Service Verbinden or zum Erstellen eines Microsoft Entra-Administratorbenutzers für Ihren Azure SQL-Datenbank-Server, wie in den folgenden Schritten gezeigt:

  1. Installieren Sie zunächst die Dienst-Verbinden or-Erweiterung ohne Kennwort für die Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Verwenden Sie dann den folgenden Befehl, um den Nicht-Administratorbenutzer von Microsoft Entra 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

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

Speichern von Daten aus Azure SQL-Datenbank

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

Um das Spring Cloud Azure Starter-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.12.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.18.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-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.xml hinzugefügt werden. Die Version ist hier nicht konfiguriert, da sie von der zuvor hinzugefügten BOM verwaltet wird.

Konfigurieren von Spring Boot für die Verwendung von Azure SQL-Datenbank

Führen Sie die folgenden Schritte aus, um Daten aus Azure SQL-Datenbank mithilfe von Spring Data SHAPE zu speichern:

  1. Konfigurieren Sie eine Azure SQL-Datenbank Anmeldeinformationen in der Konfigurationsdatei "application.properties".

    logging.level.org.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    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 Vorgehen 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/Standard/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 INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Erstellen Sie eine neue Todo Java-Klasse. Diese Klasse ist ein Do Standard Modell, das der todo Tabelle zugeordnet ist, die automatisch vom 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 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?.

  3. 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