Migrations de Base de Données
Cette image illustre la progression des migrations de base de données à travers les versions. Chaque version reflète des modifications de la structure de la base de données, telles que la création de tables, la modification de champs, ou l'ajout/suppression de colonnes, afin de répondre aux exigences de l'application.
Lors du développement d'une application, il peut être nécessaire de modifier le schéma de la base de données : ajouter de nouvelles tables, mettre à jour celles existantes, introduire des index, etc.
Les migrations permettent de gérer ces changements de manière séquentielle et organisée, garantissant l'intégrité des données et le maintien de la cohérence entre le schéma de la base de données et le code de l'application. Pour les migrations, nous utiliserons Flyway.
Qu'est-ce que Flyway ?
L'une des fonctionnalités clés de Flyway est sa prise en charge de la gestion de versions des migrations, permettant de suivre les modifications de la structure de la base de données et de revenir à des versions précédentes si nécessaire.
Création d'une migration avec Flyway
Pour commencer, ajouter la dépendance Flyway à votre projet Spring Boot. Puisque nous utilisons Maven, ajouter la dépendance suivante dans le fichier pom.xml :
Nous allons également ajouter une autre dépendance JPA, qui fonctionne avec Flyway. Nous aborderons JPA plus en détail ultérieurement.
Cette dépendance nous aidera à intégrer Flyway dans notre projet ! Mais ce n'est pas tout, il reste à le configurer !
Bien entendu, Flyway doit savoir avec quelle base de données il va travailler, il faut donc indiquer explicitement la base de données et fournir les identifiants d'accès.
Les principales configurations peuvent être définies dans application.properties :
spring.flyway.url=jdbc:mysql://localhost:3306/my_database
spring.flyway.user=root
spring.flyway.password={your_password}
Il est nécessaire de spécifier l’url, l’user et le password pour permettre à Flyway de fonctionner avec notre base de données.
Cependant, afin d’éviter de saisir ces valeurs plusieurs fois, il est possible de les référencer à partir d’autres paramètres en utilisant la syntaxe ${}.
spring.flyway.url=${spring.datasource.url}
spring.flyway.user=${spring.datasource.username}
spring.flyway.password=${spring.datasource.password}
spring.datasource.url=jdbc:mysql://localhost:3306/my_database
spring.datasource.username=root
spring.datasource.password={your_password}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Dans le chapitre précédent, une base de données my_database a été créée et une table book y a été ajoutée. Cependant, il est désormais possible de supprimer la table book puisqu’elle sera créée via une migration.
Tout est désormais prêt pour créer notre première migration dans l’application ! Il est nécessaire de créer un dossier db à l’intérieur du répertoire resources, puis, dans ce dossier, en créer un autre nommé migration. Le chemin complet doit être le suivant : src/main/resources/db/migration.
Dans le répertoire de migration, il est maintenant possible de créer des fichiers où seront définies les modifications. Le format du fichier doit être V<version>__<description>.sql.
V1__create_table_books.sql
Les migrations sont appliquées dans l’ordre de leur version. La numérotation des versions doit être séquentielle et sans interruption. Par exemple, si vous disposez des migrations V1__init.sql et V2__add_column.sql, la migration suivante doit être V3__another_change.sql.
À l’intérieur du fichier de migration, il est possible d’écrire des scripts SQL pour définir la structure de la base de données, créer de nouvelles tables, colonnes, etc.
Rédaction du script pour la création de la table books, que nous avons créée manuellement dans le chapitre précédent, dans notre fichier V1__create_table_books.sql.
create table book
(
id varchar(255) not null primary key,
name varchar(255) not null,
author varchar(255) null,
price decimal(10, 2) null
);
Il est également possible d’ajouter un paramètre dans le fichier application.properties qui indique l’emplacement des migrations, afin que Flyway connaisse le chemin exact vers les fichiers de migration :
spring.flyway.locations=classpath:db.migration
Après cela, exécutez l'application et vous devriez voir la table créée avec les champs que vous avez spécifiés dans la migration !
Il n'est plus possible de modifier la première version de la migration. Pour chaque modification de votre table, il faudra créer un nouveau fichier de migration et ajouter le nouveau script à cet endroit !
Pourquoi les migrations sont-elles importantes ?
Les migrations sont nécessaires pour une gestion ordonnée des modifications dans la base de données, la préservation de l'historique et la possibilité d'effectuer des retours en arrière si besoin.
Elles permettent de synchroniser la structure de la base de données entre les différents environnements tels que développement, test et production, tout en automatisant le processus de mise à jour, réduisant le risque d'erreurs et en garantissant que le schéma de la base de données reste cohérent avec le code de l'application.
Chaque migration permet également de documenter les modifications spécifiques, ce qui facilite la compréhension et la maintenance du schéma de la base de données.
Résumé
L'utilisation de Flyway simplifie et automatise le processus de gestion des modifications de la base de données, ce qui conduit à un développement d'applications plus fiable et efficace.
1. Qu'est-ce qu'une migration de base de données ?
2. Quel rôle jouent les versions de migration ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
What are the steps to create a migration file with Flyway?
How does Flyway handle versioning and rollbacks?
Can you explain how to configure Flyway in a Spring Boot project?
Awesome!
Completion rate improved to 3.45
Migrations de Base de Données
Glissez pour afficher le menu
Cette image illustre la progression des migrations de base de données à travers les versions. Chaque version reflète des modifications de la structure de la base de données, telles que la création de tables, la modification de champs, ou l'ajout/suppression de colonnes, afin de répondre aux exigences de l'application.
Lors du développement d'une application, il peut être nécessaire de modifier le schéma de la base de données : ajouter de nouvelles tables, mettre à jour celles existantes, introduire des index, etc.
Les migrations permettent de gérer ces changements de manière séquentielle et organisée, garantissant l'intégrité des données et le maintien de la cohérence entre le schéma de la base de données et le code de l'application. Pour les migrations, nous utiliserons Flyway.
Qu'est-ce que Flyway ?
L'une des fonctionnalités clés de Flyway est sa prise en charge de la gestion de versions des migrations, permettant de suivre les modifications de la structure de la base de données et de revenir à des versions précédentes si nécessaire.
Création d'une migration avec Flyway
Pour commencer, ajouter la dépendance Flyway à votre projet Spring Boot. Puisque nous utilisons Maven, ajouter la dépendance suivante dans le fichier pom.xml :
Nous allons également ajouter une autre dépendance JPA, qui fonctionne avec Flyway. Nous aborderons JPA plus en détail ultérieurement.
Cette dépendance nous aidera à intégrer Flyway dans notre projet ! Mais ce n'est pas tout, il reste à le configurer !
Bien entendu, Flyway doit savoir avec quelle base de données il va travailler, il faut donc indiquer explicitement la base de données et fournir les identifiants d'accès.
Les principales configurations peuvent être définies dans application.properties :
spring.flyway.url=jdbc:mysql://localhost:3306/my_database
spring.flyway.user=root
spring.flyway.password={your_password}
Il est nécessaire de spécifier l’url, l’user et le password pour permettre à Flyway de fonctionner avec notre base de données.
Cependant, afin d’éviter de saisir ces valeurs plusieurs fois, il est possible de les référencer à partir d’autres paramètres en utilisant la syntaxe ${}.
spring.flyway.url=${spring.datasource.url}
spring.flyway.user=${spring.datasource.username}
spring.flyway.password=${spring.datasource.password}
spring.datasource.url=jdbc:mysql://localhost:3306/my_database
spring.datasource.username=root
spring.datasource.password={your_password}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Dans le chapitre précédent, une base de données my_database a été créée et une table book y a été ajoutée. Cependant, il est désormais possible de supprimer la table book puisqu’elle sera créée via une migration.
Tout est désormais prêt pour créer notre première migration dans l’application ! Il est nécessaire de créer un dossier db à l’intérieur du répertoire resources, puis, dans ce dossier, en créer un autre nommé migration. Le chemin complet doit être le suivant : src/main/resources/db/migration.
Dans le répertoire de migration, il est maintenant possible de créer des fichiers où seront définies les modifications. Le format du fichier doit être V<version>__<description>.sql.
V1__create_table_books.sql
Les migrations sont appliquées dans l’ordre de leur version. La numérotation des versions doit être séquentielle et sans interruption. Par exemple, si vous disposez des migrations V1__init.sql et V2__add_column.sql, la migration suivante doit être V3__another_change.sql.
À l’intérieur du fichier de migration, il est possible d’écrire des scripts SQL pour définir la structure de la base de données, créer de nouvelles tables, colonnes, etc.
Rédaction du script pour la création de la table books, que nous avons créée manuellement dans le chapitre précédent, dans notre fichier V1__create_table_books.sql.
create table book
(
id varchar(255) not null primary key,
name varchar(255) not null,
author varchar(255) null,
price decimal(10, 2) null
);
Il est également possible d’ajouter un paramètre dans le fichier application.properties qui indique l’emplacement des migrations, afin que Flyway connaisse le chemin exact vers les fichiers de migration :
spring.flyway.locations=classpath:db.migration
Après cela, exécutez l'application et vous devriez voir la table créée avec les champs que vous avez spécifiés dans la migration !
Il n'est plus possible de modifier la première version de la migration. Pour chaque modification de votre table, il faudra créer un nouveau fichier de migration et ajouter le nouveau script à cet endroit !
Pourquoi les migrations sont-elles importantes ?
Les migrations sont nécessaires pour une gestion ordonnée des modifications dans la base de données, la préservation de l'historique et la possibilité d'effectuer des retours en arrière si besoin.
Elles permettent de synchroniser la structure de la base de données entre les différents environnements tels que développement, test et production, tout en automatisant le processus de mise à jour, réduisant le risque d'erreurs et en garantissant que le schéma de la base de données reste cohérent avec le code de l'application.
Chaque migration permet également de documenter les modifications spécifiques, ce qui facilite la compréhension et la maintenance du schéma de la base de données.
Résumé
L'utilisation de Flyway simplifie et automatise le processus de gestion des modifications de la base de données, ce qui conduit à un développement d'applications plus fiable et efficace.
1. Qu'est-ce qu'une migration de base de données ?
2. Quel rôle jouent les versions de migration ?
Merci pour vos commentaires !