Utiliser Spring Data JDBC avec Azure Database pour PostgreSQL
Ce tutoriel montre comment stocker des données dans une base de données Azure Database for PostgreSQL à 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 PostgreSQL. L’onglet Sans mot de passe affiche l’authentification Microsoft Entra et l’onglet Mot de passe affiche l’authentification PostgreSQL.
L’authentification Microsoft Entra est un mécanisme de connexion à Azure Database pour PostgreSQL utilisant les 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 PostgreSQL utilise des comptes stockés dans PostgreSQL. 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 PostgreSQL, vous devez gérer vous-même la rotation des mots de passe.
Prérequis
Un abonnement Azure - En créer un gratuitement
Java Development Kit (JDK), version 8 ou supérieure.
Si vous n'avez pas d'application Spring Boot, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Projet Maven et, sous Dépendances, ajoutez les dépendances Spring Web, Spring Data JDBC et PostgreSQL Driver, puis sélectionnez Java version 8 ou supérieure.
- Si vous n'en avez pas, créez une instance Azure Database for PostgreSQL Flexible Server nommée
postgresqlflexibletest
et une base de données nomméedemo
. Pour obtenir des instructions, reportez-vous à Démarrage rapide : Créer une base de données Azure pour PostgreSQL - Flexible Server sur le portail Azure.
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-postgresql.
Configurer une règle de pare-feu pour votre serveur PostgreSQL
Les instances Azure Database pour PostgreSQL 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, voir Règles de pare-feu dans Azure Database for PostgreSQL - Flexible Server.
Si vous vous connectez à votre serveur PostgreSQL depuis Windows Subsystem for Linux (WSL) sur un ordinateur Windows, vous devez ajouter l'ID de l'hôte WSL à votre pare-feu.
Créer un utilisateur non administrateur PostgreSQL et accorder des autorisations
Ensuite, créez un utilisateur non-administrateur et accordez toutes les autorisations à la base de données.
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 l'extension sans mot de passe Service Connector pour Azure CLI :
az extension add --name serviceconnector-passwordless --upgrade
Utilisez la commande suivante pour créer l'utilisateur non-administrateur Microsoft Entra :
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Lorsque la commande se termine, notez le nom d'utilisateur dans la sortie de la console.
Stocker les données d'Azure Database for PostgreSQL
Maintenant que vous disposez d'une instance d'Azure Database for PostgreSQL Flexible Server, vous pouvez stocker des données en utilisant Spring Cloud Azure.
Pour installer le module Spring Cloud Azure Starter JDBC PostgreSQL, 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.18.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
sur4.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.L'artefact Spring Cloud Azure Starter JDBC PostgreSQL :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Remarque
Les connexions sans mot de passe sont prises en charge depuis la version 4.5.0
.
Configurer Spring Boot pour qu’il utilise Azure Database pour PostgreSQL
Pour stocker des données à partir d'Azure Database for PostgreSQL à l'aide de Spring Data JDBC, suivez les étapes suivantes pour configurer l'application :
Configurez les informations d'identification d'Azure Database for PostgreSQL en ajoutant les propriétés suivantes à votre fichier de configuration application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Avertissement
La propriété de configuration
spring.sql.init.mode=always
signifie que Spring Boot générera automatiquement un schéma de base de données, à l'aide du fichier schema.sql que vous créerez ensuite, à chaque démarrage du serveur. 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.
- Si vous n'en avez pas, créez une instance d'Azure Database for PostgreSQL Single Server nommée
postgresqlsingletest
et une base de données nomméedemo
. Pour obtenir des instructions, consultez le Démarrage rapide : Créer une base de données Azure pour un serveur PostgreSQL en utilisant le portail Azure.
Voir l'exemple d'application
Dans cet article, 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-postgresql.
Configurer une règle de pare-feu pour votre serveur PostgreSQL
Les instances Azure Database pour PostgreSQL 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, voir Créer et gérer des règles de pare-feu pour Azure Database for PostgreSQL - Serveur unique à l'aide du portail Azure.
Si vous vous connectez à votre serveur PostgreSQL depuis Windows Subsystem for Linux (WSL) sur un ordinateur Windows, vous devez ajouter l'ID de l'hôte WSL à votre pare-feu.
Créer un utilisateur non administrateur PostgreSQL et accorder des autorisations
Ensuite, créez un utilisateur non-administrateur et accordez toutes les autorisations à la base de données.
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 l'extension sans mot de passe Service Connector pour Azure CLI :
az extension add --name serviceconnector-passwordless --upgrade
Utilisez la commande suivante pour créer l'utilisateur non-administrateur Microsoft Entra :
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Lorsque la commande se termine, notez le nom d'utilisateur dans la sortie de la console.
Stocker les données d'Azure Database for PostgreSQL
Maintenant que vous disposez d'une instance d'Azure Database for PostgreSQL Single server, vous pouvez stocker des données en utilisant Spring Cloud Azure.
Pour installer le module Spring Cloud Azure Starter JDBC PostgreSQL, 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.18.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
sur4.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.L'artefact Spring Cloud Azure Starter JDBC PostgreSQL :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Remarque
Les connexions sans mot de passe sont prises en charge depuis la version 4.5.0
.
Configurer Spring Boot pour qu’il utilise Azure Database pour PostgreSQL
Pour stocker des données à partir d'Azure Database for PostgreSQL à l'aide de Spring Data JDBC, suivez les étapes suivantes pour configurer l'application :
Configurez les informations d'identification d'Azure Database for PostgreSQL en ajoutant les propriétés suivantes à votre fichier de configuration application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Avertissement
La propriété de configuration
spring.sql.init.mode=always
signifie que Spring Boot générera automatiquement un schéma de base de données, à l'aide du fichier schema.sql que vous créerez ensuite, à chaque démarrage du serveur. 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.
Créez le fichier de configuration src/main/resources/schema.sql pour configurer le schéma de la base de données, puis ajoutez le contenu suivant.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Créez une nouvelle classe Java
Todo
. Cette classe est un modèle de domaine mappé sur la tabletodo
qui sera créée automatiquement par Spring Boot. Le code suivant ignore les méthodesgetters
etsetters
.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; }
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'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 ?
Lancez l’application. L'application stocke les données dans la base de données. Les journaux générés ressembleront à 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 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.