đ 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 :
| Valeur | Effet | Exemple d’utilisation |
|---|---|---|
| none | Aucune action. Ne touche pas Ă la base. | En production |
| create | Crée tout le schéma à chaque démarrage (écrase tout). | Pour les tests jetables, jamais en prod |
| create-drop | CrĂ©e au dĂ©marrage, supprime Ă lâarrĂȘt | Tests locaux |
| update | Synchronise les entitĂ©s et le schĂ©ma (en thĂ©orieâŠ) | DĂ©veloppement rapide, mais peut facilement prĂ©senter un DANGER |
| validate | Vérifie la conformité, ne modifie rien | Pour 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


Ă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-autoen production (noneouvalidate) - 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 simpleddl-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=updatetourner 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 !