Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm wird das Speichern von Daten in Azure Database for MySQL-Datenbank 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 MySQL-Authentifizierung. Auf der Registerkarte Passwordless werden die Microsoft Entra Authentifizierung und die Registerkarte Password die MySQL-Authentifizierung angezeigt.
Microsoft Entra Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Database for MySQL mithilfe von in Microsoft Entra ID definierten Identitäten. Mit Microsoft Entra Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.
MySQL-Authentifizierung verwendet Konten, die in MySQL 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 MySQL gespeichert werden, müssen Sie die Rotation der Kennwörter selbst verwalten.
Voraussetzungen
Ein Azure-Abonnement – create one for free.
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 Dependencies die Abhängigkeiten Spring Web, Spring Data JPA und MySQL Driver hinzu, und wählen Sie dann Java Version 8 oder höher aus.
- Wenn Sie nicht über eine verfügen, erstellen Sie eine Azure Database for MySQL flexible Serverinstanz mit dem Namen
mysqlflexibletest. Anweisungen finden Sie unter Quickstart: Verwenden Sie das Azure-Portal, um einen Azure Database for MySQL Flexible Server zu erstellen. Erstellen Sie anschließend eine Datenbank namensdemo. Anweisungen finden Sie unter Create and manage databases for Azure Database for MySQL Flexible Server.
Wichtig
Um kennwortlose Verbindungen zu verwenden, erstellen Sie einen Microsoft Entra Administratorbenutzer für Ihre Azure Database for MySQL Instanz. Anweisungen finden Sie im Abschnitt Configure the Microsoft Entra Admin von Set up Microsoft Entra authentication for Azure Database for MySQL - Flexible Server.
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-mysql verfügbar.
Konfigurieren einer Firewallregel für den MySQL-Server
Azure Database for MySQL 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 Manage firewall rules for Azure Database for MySQL – Flexible Server using the Azure portal.
Wenn Sie eine Verbindung mit Ihrem MySQL-Server von Windows Subsystem for Linux (WSL) auf einem Windows Computer herstellen, müssen Sie der Firewall die WSL-Host-IP-Adresse hinzufügen.
Erstellen eines MySQL-Nicht-Administratorbenutzers und Erteilen von Berechtigungen
In diesem Schritt wird ein Benutzer ohne Administratorrechte erstellt und ihm alle Berechtigungen für die demo Datenbank erteilt.
Sie können die folgende Methode verwenden, um einen Nicht-Administratorbenutzer zu erstellen, der eine kennwortlose Verbindung verwendet.
Verwenden Sie den folgenden Befehl, um den Service Connector kennwortlose Erweiterung für die Azure CLI zu installieren:
az extension add --name serviceconnector-passwordless --upgradeVerwenden Sie den folgenden Befehl, um den Microsoft Entra Nicht-Administratorbenutzer zu erstellen:
az connection create mysql-flexible \ --resource-group <your_resource_group_name> \ --connection mysql_conn \ --target-resource-group <your_resource_group_name> \ --server mysqlflexibletest \ --database demo \ --user-account mysql-identity-id=/subscriptions/<your_subscription_id>/resourcegroups/<your_resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<your_user_assigned_managed_identity_name> \ --query authInfo.userName \ --output tsvWenn der Befehl abgeschlossen ist, notieren Sie sich den Benutzernamen in der Konsolenausgabe.
Speichern von Daten aus Azure Database for MySQL
Nachdem Sie nun über eine Azure Database for MySQL flexible Serverinstanz verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.
Um das Spring Cloud Azure Starter JDBC MySQL-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-dependenciesVersion auf7.1.0festlegen.Wenn Sie Spring Boot 3.5.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf6.1.0festlegen.Wenn Sie Spring Boot 3.1.x-3.5.x verwenden, stellen Sie sicher, dass Sie die Version
spring-cloud-azure-dependenciesauf5.25.0setzen.Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf4.20.0festlegen.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 JDBC MySQL Artefakt:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Hinweis
Kennwortlose Verbindungen werden seit Version 4.5.0 unterstützt.
Konfigurieren von Spring Boot zur Verwendung von Azure Database for MySQL
Führen Sie die folgenden Schritte aus, um Daten aus Azure-Datenbank für MySQL mithilfe von Spring Data JPA zu speichern:
Konfigurieren Sie Azure Database for MySQL Anmeldeinformationen, indem Sie der Konfigurationsdatei application.properties die folgenden Eigenschaften hinzufügen.
logging.level.org.hibernate.SQL=DEBUG spring.datasource.azure.passwordless-enabled=true spring.datasource.url=jdbc:mysql://mysqlflexibletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username> spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8DialectWarnung
An die
spring.datasource.url-Konfigurationseigenschaft wird?serverTimezone=UTCangefügt, um den JDBC-Treiber anzuweisen, beim Herstellen einer Verbindung mit der Datenbank das UTC-Datumsformat (Coordinated Universal Time, koordinierte Weltzeit) zu verwenden. Ohne diesen Parameter würde Ihr Java Server nicht das gleiche Datumsformat wie die Datenbank verwenden, was zu einem Fehler führt.
- Wenn Sie keine haben, erstellen Sie eine Azure Database for MySQL Single Server Instanz mit dem Namen
mysqlsingletest. Anweisungen finden Sie unter Quickstart: Erstellen eines Azure Database for MySQL Servers mithilfe des Azure Portals. Erstellen Sie anschließend eine Datenbank namensdemo. Anweisungen finden Sie im Abschnitt Create a database section of Create users in Azure Database for MySQL.
Wichtig
Um kennwortlose Verbindungen zu verwenden, erstellen Sie einen Microsoft Entra Administratorbenutzer für Ihre Azure Database for MySQL Instanz. Anweisungen finden Sie im Abschnitt Microsoft Entra-Admin-Benutzer festlegen von Verwenden Sie Microsoft Entra ID zur Authentifizierung mit MySQL.
Siehe die Beispielanwendung
In diesem Artikel wird eine Beispielanwendung codiert. Wenn Sie schneller gehen möchten, ist diese Anwendung bereits codiert und unter https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql verfügbar.
Konfigurieren einer Firewallregel für den MySQL-Server
Azure Database for MySQL 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-Datenbank für MySQL mithilfe des Azure-Portals.
Wenn Sie eine Verbindung mit Ihrem MySQL-Server von Windows Subsystem for Linux (WSL) auf einem Windows Computer herstellen, müssen Sie der Firewall die WSL-Host-IP-Adresse hinzufügen.
Erstellen eines MySQL-Nicht-Administratorbenutzers und Erteilen von Berechtigungen
In diesem Schritt wird ein Benutzer ohne Administratorrechte erstellt und ihm alle Berechtigungen für die demo Datenbank erteilt.
Wichtig
Um kennwortlose Verbindungen zu verwenden, erstellen Sie einen Microsoft Entra Administratorbenutzer für Ihre Azure Database for MySQL Instanz. Weitere Informationen finden Sie im Abschnitt Festlegen des Microsoft Entra-Administratobenutzers von Verwenden des Microsoft Entra IDs zur Authentifizierung mit MySQL.
Erstellen Sie ein SQL-Skript namens create_ad_user.sql zum Erstellen eines Nicht-Administratorbenutzers. Fügen Sie den folgenden Inhalt hinzu, und speichern Sie das Skript lokal:
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '<your_mysql_ad_non_admin_username>' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON demo.* TO '<your_mysql_ad_non_admin_username>'@'%';
FLUSH privileges;
EOF
Verwenden Sie dann den folgenden Befehl, um das SQL-Skript auszuführen, um den Microsoft Entra Nicht-Administratorbenutzer zu erstellen:
mysql -h mysqlsingletest.mysql.database.azure.com --user <your_mysql_ad_admin_username>@mysqlsingletest --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Tipp
Um Microsoft Entra Authentifizierung für die Verbindung mit Azure Database for MySQL zu verwenden, müssen Sie sich mit dem von Ihnen eingerichteten Microsoft Entra Administratorbenutzer anmelden und dann das Zugriffstoken als Kennwort abrufen. Weitere Informationen finden Sie unter Use Microsoft Entra ID for authentication with MySQL.
Speichern von Daten aus Azure Database for MySQL
Nachdem Sie nun über eine Azure Database for MySQL Single Server-Instanz verfügen, können Sie Daten mithilfe von Spring Cloud Azure speichern.
Um das Spring Cloud Azure Starter JDBC MySQL-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-dependenciesVersion auf7.1.0festlegen.Wenn Sie Spring Boot 3.5.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf6.1.0festlegen.Wenn Sie Spring Boot 3.1.x-3.5.x verwenden, stellen Sie sicher, dass Sie die Version
spring-cloud-azure-dependenciesauf5.25.0setzen.Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf4.20.0festlegen.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 JDBC MySQL Artefakt:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Hinweis
Kennwortlose Verbindungen werden seit Version 4.5.0 unterstützt.
Konfigurieren von Spring Boot zur Verwendung von Azure Database for MySQL
Führen Sie die folgenden Schritte aus, um Daten aus Azure-Datenbank für MySQL mithilfe von Spring Data JPA zu speichern:
Konfigurieren Sie Azure Database for MySQL Anmeldeinformationen, indem Sie der Konfigurationsdatei application.properties die folgenden Eigenschaften hinzufügen.
logging.level.org.hibernate.SQL=DEBUG spring.datasource.azure.passwordless-enabled=true spring.datasource.url=jdbc:mysql://mysqlsingletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username>@mysqlsingletest spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8DialectWarnung
An die
spring.datasource.url-Konfigurationseigenschaft wird?serverTimezone=UTCangefügt, um den JDBC-Treiber anzuweisen, beim Herstellen einer Verbindung mit der Datenbank das UTC-Datumsformat (Coordinated Universal Time, koordinierte Weltzeit) zu verwenden. Ohne diesen Parameter würde Ihr Java Server nicht das gleiche Datumsformat wie die Datenbank verwenden, was zu einem Fehler führt.
Erstellen Sie eine neue
TodoJava Klasse. Diese Klasse ist ein Domänenmodell, das in dertodoTabelle zugeordnet wird, die automatisch von JPA erstellt wird. Der folgende Code ignoriert diegetters- undsetters-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; }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?
Starten Sie die Anwendung. Dir werden 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.