Partager via


Utiliser Spring Data JPA avec Azure SQL Database

Ce tutoriel montre comment stocker des données dans Azure SQL Database à l'aide de Spring Data JPA.

L’API de persistance Java (JPA) est l’API Java standard pour le mappage objet-relationnel.

Dans ce tutoriel, nous incluons deux méthodes d'authentification : L'authentification Microsoft Entra et l'authentification SQL Database. L'onglet Sans mot de passe montre l'authentification Microsoft Entra et l'onglet Mot de passe montre l'authentification SQL Database.

L'authentification Microsoft Entra est un mécanisme de connexion à Azure Database pour SQL Database à l'aide d'identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement centralisé, ce qui simplifie la gestion des autorisations.

L'authentification de la base de données SQL utilise des comptes stockés dans la base de données SQL. Si vous choisissez d'utiliser des mots de passe comme identifiants pour les comptes, ces identifiants seront stockés dans la table des utilisateurs. Comme ces mots de passe sont stockés dans la base de données SQL, vous devez gérer vous-même la rotation des mots de passe.

Prérequis

Important

Pour utiliser les connexions sans mot de passe, mettez à niveau le pilote MS SQL Server vers la version 12.1.0ou supérieure, puis créez un utilisateur administrateur Microsoft Entra pour votre instance de serveur Azure SQL Database. Pour plus d'informations, consultez la section Créer un administrateur Microsoft Entra du Tutoriel : Sécuriser une base de données dans Azure SQL Database.

Voir l'exemple d'application

Dans ce tutoriel, vous allez coder un exemple d'application. Si vous souhaitez aller plus vite, cette application est déjà codée et disponible sur https://github.com/Azure-Samples/quickstart-spring-data-jpa-sql-server.

Configurer une règle de pare-feu pour votre serveur Azure SQL Database

Les instances Azure SQL Database 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 le Tutoriel : Sécuriser une base de données dans Azure SQL Database.

Si vous vous connectez à votre serveur Azure SQL Database à partir de Windows Subsystem for Linux (WSL) sur un ordinateur Windows, vous devez ajouter l'ID de l'hôte WSL à votre pare-feu.

Créez un utilisateur non administrateur de la base de données SQL et accordez-lui des permissions.

Cette étape permet de créer un utilisateur non administrateur et de lui accorder toutes les permissions sur la base de données demo.

Pour utiliser des connexions sans mot de passe, voir Tutoriel : Sécuriser une base de données dans Azure SQL Database ou utiliser Service Connector pour créer un utilisateur administrateur Microsoft Entra pour votre serveur Azure SQL Database, comme indiqué dans les étapes suivantes :

  1. Tout d'abord, installez l'extension sans mot de passe Service Connector pour Azure CLI :

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Ensuite, utilisez la commande suivante pour créer l'utilisateur non administrateur Microsoft Entra :

    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
    

L'administrateur Microsoft Entra que vous avez créé est un utilisateur administrateur de base de données SQL, vous n'avez donc pas besoin de créer un nouvel utilisateur.

Important

Les connexions sans mot de passe à la base de données Azure SQL nécessitent la mise à niveau du Pilote MS SQL Server vers la version 12.1.0 ou une version supérieure. L'option de connexion est authentication=DefaultAzureCredential dans la version 12.1.0 et authentication=ActiveDirectoryDefault dans la version 12.2.0.

Stocker des données à partir d'Azure SQL Database

Avec une instance d'Azure SQL Database, vous pouvez stocker des données en utilisant Spring Cloud Azure.

Pour installer le module Spring Cloud Azure Starter, ajoutez les dépendances suivantes à votre fichier pom.xml :

  • La nomenclature Spring Cloud Azure :

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.19.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Remarque

    Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version spring-cloud-azure-dependencies sur 4.19.0. Cette nomenclature doit être configurée dans la section <dependencyManagement> de votre fichier pom.xml. Cela permet de s'assurer que toutes les dépendances de Spring Cloud Azure utilisent la même version. Pour plus d'informations sur la version utilisée pour cette nomenclature, consultez Quelle version de Spring Cloud Azure dois-je utiliser.

  • Artefact Spring Cloud Azure Starter :

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

    Remarque

    Comme il s'agit d'une dépendance, elle doit être ajoutée dans la section <dependencies> du fichier pom.xml. Sa version n'est pas configurée ici, car elle est gérée par la nomenclature que nous avons ajoutée précédemment.

Configurer Spring Boot pour qu’il utilise Azure SQL Database

Pour stocker des données à partir d'Azure SQL Database à l'aide de Spring Data JPA, suivez les étapes suivantes pour configurer l'application :

  1. Configurez un identifiant Azure SQL Database dans le fichier de configuration 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
    

    Avertissement

    La propriété de configuration spring.jpa.hibernate.ddl-auto=create-drop signifie que Spring Boot créera automatiquement un schéma de base de données quand l’application démarrera, et tentera de le supprimer quand elle s’arrêtera. Cette fonctionnalité est idéale pour les tests, mais n'oubliez pas qu'elle supprimera vos données à chaque redémarrage, vous ne devez donc pas l'utiliser en production.

  1. Créez une nouvelle classe Java Todo. Cette classe est un modèle de domaine mappé sur la table todo qui sera créée automatiquement par JPA. Le code suivant ignore les méthodes getters et setters.

    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. 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. Cependant, la connexion aux services Azure nécessite une authentification. Pour effectuer l’authentification, vous devez utiliser Identité Azure. Spring Cloud Azure utilise DefaultAzureCredential, que la bibliothèque Azure Identity fournit pour vous aider à obtenir des informations d'identification sans modifier le code.

    DefaultAzureCredential prend 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 réaliser 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 la section Authentification Azure dans les environnements de développement Java. Pour compléter l'authentification dans les environnements d'hébergement Azure, nous vous recommandons d'utiliser l'identité gérée attribuée à l'utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?

  3. Lancez l’application. Les journaux générés ressembleront à 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 des 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 assure la gestion du cycle de vie en utilisant des outils complets, tels que la supervision et les diagnostics, la gestion des configurations, la découverte de services, l’intégration CI/CD, les déploiements bleus-verts, etc. Pour déployer votre application sur Azure Spring Apps, voir Déployer votre première application sur Azure Spring Apps.

Étapes suivantes