Retour aux articles

Stratégies de migration de bases de données avec Flyway et Liquibase dans Spring Boot

Stratégies de migration de bases de données avec Flyway et Liquibase dans Spring Boot | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular
```html

Stratégies de migration de bases de données avec Flyway et Liquibase dans Spring Boot

Dans les projets Spring Boot, la gestion des schémas et des données via des outils de migration comme Flyway et Liquibase devient rapidement un facteur clé de fiabilité. L’objectif central consiste à garantir que chaque environnement (dev, test, production) applique les changements de manière cohérente, traçable et reproductible.

Pourquoi un outil de migration est essentiel

Sans migration automatisée, les équipes finissent souvent par accumuler des correctifs manuels, des scripts divergents et des risques d’incompatibilité. Les outils de migration fournissent :

  • Un historique d’exécution (auditabilité).
  • Un mécanisme d’application ordonnée des changements.
  • Une détection des écarts entre versions attendues et appliquées.
  • Des déploiements reproductibles en CI/CD.

Flyway vs Liquibase : principes et différences

Flyway

Flyway adopte un modèle orienté versions : des scripts nommés selon une convention (V1__init.sql, V2__add_table.sql, etc.) sont exécutés dans l’ordre.

Les caractéristiques typiques incluent :

  • Scripts SQL en premier plan.
  • Contrôle simple via une table de suivi (généralement flyway_schema_history).
  • Exécution séquentielle de migrations versionnées.

Liquibase

Liquibase propose un modèle orienté change sets décrits via XML, YAML, JSON ou un format natif. Les migrations sont associées à des identifiants, ce qui facilite la gouvernance du changement.

Les atouts courants :

  • Modélisation déclarative des changements (selon le format choisi).
  • Gestion fine avec contextes, préconditions et stratégies d’exécution.
  • Historique de changements via une table (souvent DATABASECHANGELOG et DATABASECHANGELOGLOCK).

Architecture recommandée dans Spring Boot

La stratégie la plus robuste consiste à intégrer le moteur de migration au cycle de démarrage de l’application. Ainsi, la base est mise à jour automatiquement avant l’exposition de l’API.

Approche “un seul flux” via configuration applicative

Une pratique fréquente consiste à définir :

  • la source des scripts (répertoire classpath ou fichier maître) ;
  • la connexion à la base (souvent via les mêmes propriétés datasource) ;
  • le contrôle du comportement (baseline, validateOnMigrate, etc.).

Exemple : configuration Flyway

Exemple de propriétés dans application.yml :

spring: flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true validate-on-migrate: true datasource: url: jdbc:postgresql://localhost:5432/app username: user password: pass

Exemple : configuration Liquibase

Exemple de propriétés dans application.yml :

spring: liquibase: enabled: true change-log: classpath:db/changelog/db.changelog-master.yaml contexts: dev,prod datasource: url: jdbc:postgresql://localhost:5432/app username: user password: pass

Stratégies de migration : choisir la bonne méthode

1) Migrations versionnées (Flyway) et gouvernance par étapes

Pour Flyway, la stratégie la plus courante consiste à :

  • créer des scripts immuables une fois publiés ;
  • ajouter des migrations successives pour tout changement ;
  • documenter chaque étape (impact, tables affectées, risques).

Exemple de convention de nommage :

V1__init.sql V2__add_users_table.sql V3__add_index_on_users_email.sql

2) Change sets déclaratifs (Liquibase) et préconditions

Pour Liquibase, la stratégie consiste à modéliser les changements en change sets et à utiliser des préconditions afin de limiter les échecs en environnements hétérogènes.

Exemple (YAML) avec change set conditionnel :

databaseChangeLog: - changeSet: id: 2026-04-01-01-add-index-users-email author: team-platform preConditions: - onFail: MARK_RAN - sqlCheck: expectedResult: "0" sql: "SELECT COUNT(*) FROM pg_indexes WHERE indexname = 'idx_users_email'" changes: - createIndex: tableName: users indexName: idx_users_email columns: - column: name: email

Stratégies avancées : baselines, environnements et rollback

Baseline pour intégrer des bases existantes

Lorsque la base de production existe déjà, une approche fréquente consiste à créer une baseline :

  • définir un point de départ (aucune migration historique n’est rejouée) ;
  • consigner l’état initial comme référence.

Flyway propose typiquement baselineOnMigrate, tandis que Liquibase s’appuie sur un log d’historique et des mécanismes de marquage.

Rollback : décider d’une stratégie de réversibilité

La question du rollback dépend du type de modification :

  • Schémas : souvent irréversibles ou très coûteux (suppression de colonnes, contraintes, données).
  • Données : certaines modifications sont réversibles (transformations), d’autres nécessitent des sauvegardes.

Dans des environnements industriels, la pratique la plus prudente consiste à :

  • prévoir des migrations additives (ajout de colonnes/colonnes nullable, index en parallèle) ;
  • déplacer la réversibilité vers le niveau applicatif (compatibilité) ;
  • utiliser un rollback uniquement quand une réversibilité fiable est documentée.

Compatibilité applicative : stratégie “expand and contract”

Une technique courante consiste à effectuer des changements en deux phases :

  • Expand : ajouter des structures sans casser la lecture actuelle (colonnes nullable, tables parallèles, nouvelles routes de lecture).
  • Contract : supprimer l’ancien modèle une fois l’application migrée et stable.

Performance et sécurité des migrations

Les migrations peuvent impacter la disponibilité. Une stratégie saine inclut :

  • Exécuter les index avec une attention au verrouillage (selon le SGBD).
  • Contrôler la taille des tables et utiliser des migrations par lots pour les données.
  • Limiter les transactions si le SGBD le nécessite (certaines opérations longues).
  • Tester sur un clone de la base de production.

Comparatif de scénarios concrets

Création initiale du schéma

Flyway convient bien aux scripts SQL d’initialisation simples. Liquibase est intéressant quand la logique doit être exprimée de façon plus abstraite (change sets) et réutilisée via contexts.

Évolutions fréquentes du modèle

Liquibase facilite la gestion de complexité (préconditions, contexts, regroupement). Flyway reste robuste quand l’équipe privilégie une discipline stricte de versionnage SQL.

Déploiements multi-environnements

Liquibase se distingue souvent par la finesse sur les contextes et la tolérance à certains écarts via préconditions. Flyway peut aussi gérer des cas limites via callbacks et validation, mais demande une discipline plus stricte sur la compatibilité des scripts.

Bonnes pratiques de gouvernance

  • Immuabilité des migrations déjà appliquées (ne jamais modifier un fichier versionné en Flyway, ni un change set exécuté en Liquibase sans procédure contrôlée).
  • Idempotence maîtrisée : utiliser des préconditions ou des checks d’existence quand nécessaire.
  • Validation en CI : exécuter les migrations sur une base de test automatisée.
  • Traçabilité : nommer correctement les auteurs, l’ID, et documenter l’objectif.
  • Observabilité : consigner les étapes et surveiller les durées.

Conclusion

Flyway et Liquibase répondent au même besoin fondamental : rendre les migrations de bases fiables, traçables et automatisées dans Spring Boot. La stratégie optimale dépend toutefois de la culture de l’équipe (SQL direct vs modélisation déclarative), des contraintes de déploiement (multi-environnements, compatibilité) et des exigences de performance lors des changements de schéma et de données.

Checklist rapide

  • Définir une convention de nommage et une discipline d’immuabilité.
  • Prévoir baseline si la base existe déjà.
  • Tester la migration sur des environnements représentatifs.
  • Minimiser les verrous et segmenter les changements volumineux.
  • Documenter impacts, risques, et plan de reprise.

À propos de l'auteur

Laty Gueye Samba est développeur Full Stack basé à Dakar, Sénégal. Spécialiste des écosystèmes Java / Spring Boot et Angular.

Contact : latygueyesamba@gmail.com  |  Dakar, Sénégal

© 2026 Laty Gueye Samba.