Introduction à Flyway : qu'est-ce que c'est et pourquoi l'utiliser
Flyway est une bibliothèque de gestion de versions et de migrations de bases de données (Database Migration Tool). Dans le développement logiciel moderne, notamment en travail d'équipe et avec les méthodologies CI/CD, il est crucial de synchroniser la structure de la base de données entre les développeurs, les environnements de test et de production. Flyway résout ce problème en permettant de décrire les modifications du schéma de la base de données (création de tables, ajout de colonnes, d'index, de triggers, etc.) sous forme de scripts SQL versionnés ou de classes Java.
Le concept principal de Flyway est simple : chaque migration possède un numéro de version unique (par exemple V1, V2, V3) et est exécutée une seule fois. La bibliothèque suit les migrations déjà appliquées à une base de données spécifique à l'aide d'une table dédiée (par défaut flyway_schema_history). Cela garantit l'idempotence et la reproductibilité de l'état de la base de données.
Pourquoi utiliser Flyway ?
- Versionnage du schéma : Chaque modification de la base de données est une version distincte, pouvant être annulée ou appliquée.
- Automatisation : Intégration avec Maven, Gradle, Spring Boot et les pipelines CI/CD.
- Contrôle d'intégrité : Flyway vérifie les sommes de contrôle des migrations, empêchant les modifications accidentelles de scripts déjà exécutés.
- Simplicité : Pour la plupart des tâches, il suffit d'écrire un simple script SQL.
Installation de Flyway pour Java
Flyway ne s'installe pas via pip ou npm, car c'est une bibliothèque Java. Il existe plusieurs façons de l'ajouter à votre projet :
1. Maven (pom.xml)
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>9.22.3</version> <!-- Version actuelle au moment de la rédaction -->
</dependency>
<!-- Pilote pour votre base de données, par exemple PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
2. Gradle (build.gradle)
implementation 'org.flywaydb:flyway-core:9.22.3'
implementation 'org.postgresql:postgresql:42.7.1'
3. Plugin Maven (pour exécution en ligne de commande)
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>9.22.3</version>
<configuration>
<url>jdbc:postgresql://localhost:5432/mydb</url>
<user>myuser</user>
<password>mypassword</password>
</configuration>
</plugin>
4. Spring Boot (configuration automatique)
Si vous utilisez Spring Boot, il suffit d'ajouter la dépendance et de configurer les paramètres dans application.properties :
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
Démarrage rapide avec un exemple de code
Examinons un exemple minimal d'utilisation de Flyway dans une application Java pour créer une table users.
Étape 1 : Créez la structure de répertoires pour les migrations
Par défaut, Flyway recherche les scripts SQL dans le dossier db/migration du classpath (par exemple src/main/resources/db/migration).
Étape 2 : Créez le fichier de migration
Créez un fichier nommé V1__Create_users_table.sql dans ce dossier :
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);