Introduction à Flyway
Flyway est un outil open source de gestion de versions de bases de données, fondé sur des conventions simplifiées. Il propose des commandes essentielles telles que migrate, clean, info, validate, baseline et repair, prenant en charge à la fois les scripts SQL (comme PL/SQL ou T-SQL) et les implémentations en Java. L'outil s'intègre avec diverses plateformes et propose des plugins pour Maven, Gradle, entre autres. Pour plus de détails, consultez la documentatino officielle sur le site de Flyway.
Cet article illustre l'utilisation de Flyway dans un projet Spring Boot existant, en s'inspirant d'un exemple basé sur JdbcTemplate. Vous pouvez applqiuer ces étapes à tout projet impliquant l'accès aux données.
Étapes d'implémentation
Pour commencer, ajoutez la dépendance Flyway dans votre fichier de construction. Dans le cas d'un projet Maven, modifiez le fichier pom.xml comme suit :
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>7.15.0</version>
</dependency>
Ensuite, créez un répertoire dédié aux scripts de migration sous src/main/resources, par exemple migrations. Ajoutez-y un fichier SQL nommé V1__initial_schema.sql pour définir la structure initiale :
DROP TABLE IF EXISTS clients;
CREATE TABLE clients (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100)
);
Dans le fichier de configuration application.properties, indiquez l'emplacement des scripts et activez Flyway :
flyway.locations=classpath:/migrations
flyway.baseline-on-migrate=true
spring.flyway.enabled=true
Lors de l'exécution des tests, Flyway détecte automatiquement les migrations nécessaires. Les logs afficheront des informations sur le processus, comme la validation des scripts et l'application des changements. Par exemple :
INFO : Flyway Community Edition 7.15.0
INFO : Database: jdbc:mysql://localhost:3306/mydb (MySQL 8.0)
INFO : Successfully validated 1 migration
INFO : Creating Schema History table
INFO : Migrating schema to version 1 - initial schema
INFO : Successfully applied 1 migration
À la seconde exécution, si aucune modification n'a été apportée aux scripts, Flyway indiquera que la base de données est à jour, évitant ainsi les exécutions redondantes. Toutefois, si vous modifiez un script existant, comme changer la taille d'une colonne dans V1__initial_schema.sql, Flyway échouera à la validation avec une erreur de checksum, protégeant ainsi l'intégrité des données :
ERROR : Application startup failed
FlywayException: Validate failed: Migration checksum mismatch for version 1
Cette vérification garantit que les modifications contrôlées ne perturbent pas les environnements existants, assurant une gestion fiable des schémas de base de données au fil du temps.