Hamed Cédric SYLLA

🚀 Spring Boot – Passe Ă  la vitesse supĂ©rieure : GĂšre tes migrations SQL comme un pro avec Flyway

đŸȘ§ Introduction

Qui n’a jamais utilisĂ© spring.jpa.hibernate.ddl-auto=update pour faire Ă©voluer le schĂ©ma de sa base de donnĂ©es dans un projet Spring Boot ?
C’est simple, rapide, mais
 peut ĂȘtre dangereux.

Beaucoup de dĂ©veloppeurs Java/Spring ne savent pas qu’il existe des outils pros comme Flyway pour gĂ©rer les Ă©volutions de la base de donnĂ©es. Ces outils permettent de versionner chaque modification et d’assurer la stabilitĂ© du projet, mĂȘme en Ă©quipe.

Dans cet article, je t’explique pourquoi il faut sortir de la « magie » Hibernate, comment fonctionne Flyway, et comment l’adopter simplement dans tes projets.

Cet article va t’expliquer :

  • Les limites et les risques de ddl-auto
  • Les diffĂ©rentes valeurs de la propriĂ©tĂ© Spring Boot
  • Les avantages de Flyway, comparĂ© Ă  la gĂ©nĂ©ration automatique
  • Un exemple concret d’intĂ©gration et de migration
  • Les bonnes pratiques Ă  adopter (et les piĂšges Ă  Ă©viter)

1. ⚠ ddl-auto=update : la fausse bonne idĂ©e

Dans la majorité des tutos, on voit souvent ceci :

Mais sais-tu vraiment ce que cela fait ?
Petit tour d’horizon des valeurs possibles :

ValeurEffetExemple d’utilisation
noneAucune action. Ne touche pas Ă  la base.En production
createCrée tout le schéma à chaque démarrage (écrase tout).Pour les tests jetables, jamais en prod
create-dropCrĂ©e au dĂ©marrage, supprime Ă  l’arrĂȘtTests locaux
updateSynchronise les entités et le schéma (en théorie
)Développement rapide, mais peut facilement présenter un DANGER
validateVérifie la conformité, ne modifie rienPour contrÎler sans toucher à la base

Pourquoi “update” pose problùme ?

  • Ajout de nouveaux champs, mais gĂšre mal les suppressions, renommages, types modifiĂ©s
  • Impossible de prĂ©voir ce qui va vraiment se passer (surtout sur une base dĂ©jĂ  peuplĂ©e et si on travaille en Ă©quipe)
  • Aucun historique ni possibilitĂ© de rollback
  • Collaboration compliquĂ©e : si deux devs font Ă©voluer le schĂ©ma, gare aux surprises !
  • En prod, tu risques de perdre des donnĂ©es ou de casser ton application sans retour arriĂšre

⚠ ddl-auto=update est pratique pour un prototype ou un POC, mais Ă  bannir dĂšs que le projet devient sĂ©rieux !

2. 🚩Pourquoi Flyway ? Le contrîle, tout simplement

Flyway, c’est un outil de migration de base de donnĂ©es simple et puissant qui t’aide Ă  :

  • Versionner chaque modification du schĂ©ma (fini les « je ne sais plus ce qui a Ă©tĂ© modifié »)
  • Écrire des scripts SQL explicites, versionnĂ©s, stockĂ©s dans ton repo Git
  • Appliquer les modifications dans l’ordre et traçable
  • Revenir en arriĂšre si besoin (dans la limite des scripts Ă©crits)
  • Travailler en Ă©quipe sans se marcher sur les pieds

Le principe ?

Chaque migration est un fichier SQL versionné (V1__init.sql, V2__add_user_table.sql, etc.).
Flyway garde en base un historique de ce qui a dĂ©jĂ  Ă©tĂ© appliquĂ©. À chaque dĂ©marrage, il applique seulement les nouveaux scripts.

3. đŸ‘šâ€đŸ’» IntĂ©grer Flyway dans un projet Spring Boot

Étape 1 – Ajouter la dĂ©pendance Flyway

Avec Maven :

Étape 2 – Le dossier de migration

Par dĂ©faut, les scripts de migration doivent ĂȘtre placĂ©s dans le dossier src/main/resources/db/migration.
Ce répertoire est utilisé automatiquement par Flyway, mais tu peux le modifier à ta convenance via la propriété spring.flyway.locations dans ton application.properties.

Étape 3 – Écrire les scripts SQL

  • Les scripts sont nommĂ©s ainsi : V1__init.sql, V2__add_column.sql, etc.
  • Ils sont exĂ©cutĂ©s dans l’ordre des versions (V1, V2, etc. indique l’ordre d’exĂ©cution)

Exemple

Script de création de la table users
Script de modification de la table users afin d’ajouter le champ email

Étape 4 – Configurer Flyway (optionnel, Spring le fait pour toi)

Tu peux, si besoin, ajuster le comportement de Flyway dans le fichier application.properties.
Par défaut, la configuration fonctionne sans rien changer, mais sache que presque tout est personnalisable selon tes besoins : chemin des migrations, nom du schéma, activation/désactivation, etc.

Au démarrage, Flyway vérifie la base, voit quelles migrations manquent, et les applique.

4. đŸ›Ąïž Bonnes pratiques et conseils

  • Toujours dĂ©sactiver ddl-auto en production (none ou validate)
  • Versionne tes scripts SQL
  • Ne mĂ©lange pas la gĂ©nĂ©ration automatique et Flyway : une seule source de vĂ©ritĂ©
  • Teste chaque migration sur une base locale AVANT de dĂ©ployer en prod
  • Nomme tes fichiers de maniĂšre explicite : facile Ă  relire, Ă  comprendre et Ă  auditer (cela facilite aussi le travail en Ă©quipe)

5. ⚡ Avantages concrets de Flyway

✔ LisibilitĂ© : chaque migration est claire, traçable, et explicite
✔ Collaboration : chacun ajoute ses migrations, aucun risque de conflit cachĂ©
✔ FacilitĂ© de rollback (au moins sur les migrations simples, en réécrivant le script inverse)
✔ Aucune magie : c’est toi qui pilote !
✔ AdaptĂ© Ă  toutes les bases SQL : PostgreSQL, MySQL, MariaDB, etc.

6. ❗Limites Ă  connaĂźtre

✖ Pas de rollback automatique : Flyway ne revient pas en arriĂšre tout seul. Si tu veux annuler une migration, tu dois Ă©crire le script inverse manuellement.
✖ Scripts Ă  maintenir : plus il y a de migrations, plus il faut organiser et documenter ses fichiers pour garder la cohĂ©rence.
✖ Migration destructive Ă  manier avec prĂ©caution : les suppressions ou modifications de colonnes doivent ĂȘtre bien rĂ©flĂ©chies pour ne pas perdre de donnĂ©es.
✖ Pas adaptĂ© au NoSQL : Flyway gĂšre uniquement les bases SQL.
✖ Prise en main nĂ©cessaire : demande un petit effort de discipline par rapport Ă  ddl-auto, surtout au dĂ©but, le temps de prendre le pli.

Au final :
MĂȘme si Flyway impose un peu plus de rigueur et d’organisation qu’un simple ddl-auto=update, c’est ce qui en fait un outil pro et fiable ! Les limites sont largement compensĂ©es par la sĂ©curitĂ© et la maĂźtrise des Ă©volutions de ta base.

7. ❌ Ce qu’il ne faut PAS faire

  • Laisser ddl-auto=update tourner en parallĂšle de Flyway
  • Modifier la base « à la main » sans migration (oublie direct ce qui a Ă©tĂ© fait)
  • Faire des scripts trop gros, ou peu explicites (“V15__global_changes.sql”)
  • Oublier de tester sur une copie de la prod (avant d’exĂ©cuter en prod)

🧭 Conclusion

Avec Flyway, tu passes d’une gestion hasardeuse Ă  une maĂźtrise totale de l’évolution de ta base de donnĂ©es.
Fini les surprises et les conflits liĂ©s Ă  ddl-auto=update : chaque modification est tracĂ©e, testĂ©e, et versionnĂ©e.
Tu gagnes en transparence, en sécurité, et tu facilites le travail en équipe.

La base d’un projet solide commence par des migrations maĂźtrisĂ©es !

📚 Sources & lectures recommandĂ©es

Leave a Comment