Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel montre comment stocker des données dans Azure Database for MySQL base de données à l’aide de Spring Data JPA.
L’API de persistance Java (JPA) est l’API de Java standard pour le mappage relationnel objet.
Dans ce tutoriel, nous incluons deux méthodes d’authentification : Microsoft Entra l’authentification et l’authentification MySQL. L’onglet Passwordless affiche l’authentification Microsoft Entra et l’onglet Password affiche l’authentification MySQL.
L'authentification Microsoft Entra est un mécanisme de connexion à Azure Database for MySQL à l’aide d’identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités utilisateur de base de données et d’autres services Microsoft dans un emplacement central, ce qui simplifie la gestion des autorisations.
L’authentification MySQL utilise des comptes stockés dans MySQL. Si vous choisissez d’utiliser des mots de passe comme informations d’identification pour les comptes, ces informations d’identification sont stockées dans la table user. Comme ces mots de passe sont stockés dans MySQL, vous devez gérer vous-même la rotation des mots de passe.
Prérequis
Un abonnement Azure - créez-en un gratuitement.
Java Kit de développement (JDK), version 8 ou ultérieure.
Si vous n'avez pas d'application Spring Boot, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Maven Project et, sous Dependencies, ajoutez le Spring Web, Spring Data JPA et MySQL Driver, puis sélectionnez Java version 8 ou ultérieure.
- Si vous n'en avez pas, créez une instance de serveur flexible Azure Database for MySQL nommée
mysqlflexibletest. Pour obtenir des instructions, consultez Quickstart : Utilisez le portail Azure pour créer un serveur flexible Azure Database for MySQL. Créez ensuite une base de données nomméedemo. Pour obtenir des instructions, consultez Créer et gérer des bases de données pour Azure Database for MySQL serveur flexible.
Importante
Pour utiliser des connexions sans mot de passe, créez un utilisateur administrateur Microsoft Entra pour votre instance de Azure Database for MySQL. Pour obtenir des instructions, consultez la section Configurer la section Microsoft Entra Admin de Set up Microsoft Entra authentication for Azure Database for MySQL - Flexible Server.
Voir l'exemple d'application
Dans ce tutoriel, vous allez coder un exemple d'application. Si vous souhaitez aller plus rapidement, cette application est déjà codée et disponible à https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.
Configurer une règle de pare-feu pour votre serveur MySQL
Azure Database for MySQL instances sont sécurisées par défaut. Elles ont un pare-feu qui n’autorise aucune connexion entrante.
Pour pouvoir utiliser votre base de données, ouvrez le pare-feu du serveur afin d'autoriser l'adresse IP locale à accéder au serveur de base de données. Pour plus d’informations, consultez Manage firewall rules for Azure Database for MySQL - Flexible Server using the Azure portal.
Si vous vous connectez à votre serveur MySQL à partir de Windows Subsystem for Linux (WSL) sur un ordinateur Windows, vous devez ajouter l'adresse IP de l'hôte WSL à votre pare-feu.
Créer un utilisateur non-administrateur MySQL et accorder des autorisations
Cette étape permet de créer un utilisateur non administrateur et de lui accorder toutes les permissions sur la base de données demo.
Vous pouvez utiliser la méthode suivante pour créer un utilisateur non administrateur qui utilise une connexion sans mot de passe.
Utilisez la commande suivante pour installer le connecteur Service Connector sans mot de passe pour le Azure CLI :
az extension add --name serviceconnector-passwordless --upgradeUtilisez la commande suivante pour créer l’utilisateur non administrateur Microsoft Entra :
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 tsvLorsque la commande se termine, notez le nom d'utilisateur dans la sortie de la console.
Stocker des données à partir de Azure Database for MySQL
Maintenant que vous disposez d’une instance de serveur flexible Azure Database for MySQL, vous pouvez stocker des données à l’aide de Spring Cloud Azure.
Pour installer le module Spring Cloud Azure Starter JDBC MySQL, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Bill of Materials (BOM) de Spring Cloud Azure :
<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>Remarque
Si vous utilisez Spring Boot 4.0.x, veillez à mettre la
spring-cloud-azure-dependenciesversion à7.1.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.1.0.Si vous utilisez Spring Boot 3.1.x-3.5.x, veillez à définir la version
spring-cloud-azure-dependencies5.25.0.Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version
spring-cloud-azure-dependenciessur4.20.0.Cette liste de matériel (BOM) doit être configurée dans la section
<dependencyManagement>de votre fichier pom.xml. Cela garantit que toutes les dépendances spring Cloud Azure utilisent la même version.Pour plus d’informations sur la version utilisée pour ce boM, consultez Which Version of Spring Cloud Azure Should I Use.
L’artefact Spring Cloud Azure Starter JDBC MySQL :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Remarque
Les connexions sans mot de passe sont prises en charge depuis la version 4.5.0.
Configurer Spring Boot pour utiliser Azure Database for MySQL
Pour stocker des données à partir de Azure Database for MySQL à l’aide de Spring Data JPA, procédez comme suit pour configurer l’application :
Configurez les identifiants Azure Database for MySQL en ajoutant les propriétés suivantes à votre fichier de configuration application.properties.
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.MySQL8DialectAvertissement
spring.datasource.urla été ajouté à la propriété de configuration?serverTimezone=UTCpour indiquer au pilote JDBC d’utiliser le format de date UTC (Coordinated Universal Time) lors de la connexion à la base de données. Sans ce paramètre, votre serveur Java n'utiliserait pas le même format de date que la base de données, ce qui entraînerait une erreur.
- Si vous n'en avez pas, créez une instance de serveur unique Azure Database for MySQL nommée
mysqlsingletest. Pour obtenir des instructions, consultez Quickstart : Créer un serveur Azure Database for MySQL à l’aide du portail Azure. Créez ensuite une base de données nomméedemo. Pour obtenir des instructions, consultez la section Create a database de Create users in Azure Database for MySQL.
Importante
Pour utiliser des connexions sans mot de passe, créez un utilisateur administrateur Microsoft Entra pour votre instance de Azure Database for MySQL. Pour obtenir des instructions, consultez la section Définir l'utilisateur administrateur Microsoft Entra de Utiliser Microsoft Entra ID pour l'authentification avec MySQL.
Voir l'exemple d'application
Dans cet article, vous allez coder un exemple d'application. Si vous souhaitez aller plus rapidement, cette application est déjà codée et disponible à https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.
Configurer une règle de pare-feu pour votre serveur MySQL
Azure Database for MySQL instances sont sécurisées par défaut. Elles ont un pare-feu qui n’autorise aucune connexion entrante.
Pour pouvoir utiliser votre base de données, ouvrez le pare-feu du serveur afin d'autoriser l'adresse IP locale à accéder au serveur de base de données. Pour plus d’informations, consultez Créer et gérer les règles de pare-feu Azure Database for MySQL à l’aide du portail Azure.
Si vous vous connectez à votre serveur MySQL à partir de Windows Subsystem for Linux (WSL) sur un ordinateur Windows, vous devez ajouter l'adresse IP de l'hôte WSL à votre pare-feu.
Créer un utilisateur non-administrateur MySQL et accorder des autorisations
Cette étape permet de créer un utilisateur non administrateur et de lui accorder toutes les permissions sur la base de données demo.
Importante
Pour utiliser des connexions sans mot de passe, créez un utilisateur administrateur Microsoft Entra pour votre instance de Azure Database for MySQL. Pour plus d'informations, consultez la section Configuration de l'utilisateur Admin Microsoft Entra de Utiliser Microsoft Entra ID pour l'authentification avec MySQL.
Créez un script SQL appelé create_ad_user.sql pour créer un utilisateur non administrateur. Ajoutez le contenu suivant et enregistrez-le localement :
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
Utilisez ensuite la commande suivante pour exécuter le script SQL pour créer le Microsoft Entra utilisateur non administrateur :
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
Conseil
Pour utiliser Microsoft Entra authentification pour vous connecter à Azure Database for MySQL, vous devez vous connecter avec l’utilisateur administrateur Microsoft Entra que vous avez configuré, puis obtenir le jeton d’accès comme mot de passe. Pour plus d’informations, consultez Utilisez Microsoft Entra ID pour l’authentification avec MySQL.
Stocker des données à partir de Azure Database for MySQL
Maintenant que vous disposez d’une instance de serveur unique Azure Database for MySQL, vous pouvez stocker des données à l’aide de Spring Cloud Azure.
Pour installer le module Spring Cloud Azure Starter JDBC MySQL, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Bill of Materials (BOM) de Spring Cloud Azure :
<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>Remarque
Si vous utilisez Spring Boot 4.0.x, veillez à mettre la
spring-cloud-azure-dependenciesversion à7.1.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.1.0.Si vous utilisez Spring Boot 3.1.x-3.5.x, veillez à définir la version
spring-cloud-azure-dependencies5.25.0.Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version
spring-cloud-azure-dependenciessur4.20.0.Cette liste de matériel (BOM) doit être configurée dans la section
<dependencyManagement>de votre fichier pom.xml. Cela garantit que toutes les dépendances spring Cloud Azure utilisent la même version.Pour plus d’informations sur la version utilisée pour ce boM, consultez Which Version of Spring Cloud Azure Should I Use.
L’artefact Spring Cloud Azure Starter JDBC MySQL :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Remarque
Les connexions sans mot de passe sont prises en charge depuis la version 4.5.0.
Configurer Spring Boot pour utiliser Azure Database for MySQL
Pour stocker des données à partir de Azure Database for MySQL à l’aide de Spring Data JPA, procédez comme suit pour configurer l’application :
Configurez les identifiants Azure Database for MySQL en ajoutant les propriétés suivantes à votre fichier de configuration application.properties.
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.MySQL8DialectAvertissement
spring.datasource.urla été ajouté à la propriété de configuration?serverTimezone=UTCpour indiquer au pilote JDBC d’utiliser le format de date UTC (Coordinated Universal Time) lors de la connexion à la base de données. Sans ce paramètre, votre serveur Java n'utiliserait pas le même format de date que la base de données, ce qui entraînerait une erreur.
Créez une classe
TodoJava. Cette classe est un modèle de domaine mappé sur la tabletodoqui sera créée automatiquement par JPA. Le code suivant ignore les méthodesgettersetsetters.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; }Modifiez le fichier de classe de démarrage pour afficher le contenu suivant.
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> { }Conseil
Dans ce tutoriel, il n'y a pas d'opérations d'authentification dans les configurations ou le code. Toutefois, la connexion à Azure services nécessite une authentification. Pour terminer l’authentification, vous devez utiliser Azure Identity. Spring Cloud Azure utilise
DefaultAzureCredential, que la bibliothèque Azure Identity fournit pour vous aider à obtenir des informations d’identification sans aucune modification du code.DefaultAzureCredentialprend en charge plusieurs méthodes d’authentification et détermine quelle méthode doit être utilisée au moment de l’exécution. Cette approche permet à votre application d'utiliser différentes méthodes d'authentification dans différents environnements (tels que les environnements locaux et de production) sans implémenter de code spécifique à l'environnement. Pour plus d’informations, consultez DefaultAzureCredential.Pour terminer l’authentification dans les environnements de développement locaux, vous pouvez utiliser Azure CLI, Visual Studio Code, PowerShell ou d’autres méthodes. Pour plus d’informations, consultez l'authentification Azure dans les environnements de développement Java. Pour terminer l’authentification dans Azure environnements d’hébergement, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Qu’est-ce que les identités managées pour les ressources Azure ?
Lancez l’application. Vous verrez des journaux d’activité ressemblant à l’exemple suivant :
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
Déployer sur Azure Spring Apps
Maintenant que l'application Spring Boot fonctionne localement, il est temps de la mettre en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification du code. Le service gère l’infrastructure des applications Spring, ce qui permet aux développeurs de se concentrer sur leur code. Azure Spring Apps fournit une gestion du cycle de vie à l’aide de la supervision et des diagnostics complets, de la gestion de la configuration, de la découverte de services, de l’intégration CI/CD, des déploiements bleu-vert, etc. Pour déployer votre application sur Azure Spring Apps, consultez Deploy your first application to Azure Spring Apps.