Utiliser Spring Data JDBC avec Azure SQL Database

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

JDBC est l’API Java standard pour se connecter à des bases de données relationnelles traditionnelles.

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 affiche l’authentification Microsoft Entra et l’onglet Mot de passe affiche 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 l’ID Microsoft Entra. 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 SQL Database utilise des comptes stockés dans SQL Database. 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 utilisateur. Étant donné que ces mots de passe sont stockés dans SQL Database, vous devez gérer la rotation des mots de passe par vous-même.

Prérequis

  • utilitaire sqlcmd.

  • Pilote ODBC 17 ou 18.

  • Si vous n’en avez pas, créez une instance Azure SQL Server nommée sqlservertest et une base de données nommée demo. Pour obtenir des instructions, consultez Démarrage rapide : Créer une base de données unique - Azure SQL Database.

  • Si vous n’avez pas d’application Spring Boot, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Maven Project et, sous Dépendances, ajoutez les dépendances Spring Web, Spring Data JDBC et MS SQL Server Driver, puis sélectionnez Java version 8 ou ultérieure.

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-jdbc-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 pour autoriser l’adresse IP locale à accéder au serveur de base de données. Pour plus d’informations, consultez Tutoriel : Sécuriser une base de données dans Azure SQL Database.

Si vous vous connectez à votre serveur Azure SQL Database à partir de Sous-système Windows pour Linux (WSL) sur un ordinateur Windows, vous devez ajouter l’ID d’hôte WSL à votre pare-feu.

Créer un utilisateur non administrateur de base de données SQL et accorder une autorisation

Cette étape crée un utilisateur non administrateur et lui accorde toutes les autorisations sur la demo base de données.

Pour utiliser des connexions sans mot de passe, consultez Tutoriel : Sécuriser une base de données dans Azure SQL Database ou utiliser le service Connecter or 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 du service Connecter or 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 utilisateur.

Important

Les connexions sans mot de passe azure SQL Database nécessitent la mise à niveau du pilote MS SQL Server vers une version ou une version 12.1.0 ulté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 Azure SQL Database, vous pouvez stocker des données à l’aide de Spring Cloud Azure.

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

  • The Spring Cloud Azure Bill of Materials (BOM) :

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

    Remarque

    Si vous utilisez Spring Boot 2.x, veillez à définir la spring-cloud-azure-dependencies version 4.16.0sur . Cette facture de matériel (BOM) doit être configurée dans la <dependencyManagement> section de votre fichier pom.xml . Cela garantit que toutes les dépendances Azure Spring Cloud utilisent la même version. Pour plus d’informations sur la version utilisée pour ce boM, consultez La version de Spring Cloud Azure à 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 <dependencies> section de la pom.xml. Sa version n’est pas configurée ici, car elle est gérée par le boM que nous avons ajouté 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 JDBC, procédez comme suit pour configurer l’application :

  1. Configurez des informations d’identification Azure SQL Database dans le fichier de configuration 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
    

    Avertissement

    La propriété spring.sql.init.mode=always de configuration signifie que Spring Boot génère automatiquement un schéma de base de données à l’aide du fichier schema.sql que vous allez créer ensuite, chaque fois que le serveur est démarré. C’est très utile pour les tests, mais n’oubliez pas que cela supprimera vos données à chaque redémarrage. Par conséquent, ne l’utilisez pas en production.

  1. Créez le fichier de configuration src/main/resources/schema.sql pour configurer le schéma de base de données, puis ajoutez le contenu suivant.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Créez une Todo classe Java. Cette classe est un modèle de domaine mappé sur la todo table qui sera créée automatiquement par Spring Boot. Le code suivant ignore les méthodes et setters les getters méthodes.

    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. 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.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> {
    
    }
    

    Conseil

    Dans ce tutoriel, il n’existe aucune opération d’authentification dans les configurations ou le code. Toutefois, 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 d’identités Azure fournit pour vous aider à obtenir des informations d’identification sans aucune modification du 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 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 les environnements d’hébergement Azure, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?

  3. Lancez l’application. L’application stocke les données dans la base de données. Vous verrez des journaux similaires à l’exemple suivant :

    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
    

Déployer sur Azure Spring Apps

Maintenant que vous disposez de l’application Spring Boot en cours d’exécution localement, il est temps de le déplacer en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification de 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, consultez Déployer votre première application sur Azure Spring Apps.

Étapes suivantes