Migration de base de donnée via Maven – Exemple avec Flyway et Liquibase

Voici un article sur la migration de base de donnée. On va tester deux systèmes de migration de base de donnée dans le monde Java et Maven : Flyway et Liquibase.

Les exemples se trouvent dans ce repository. Ils sont configurés pour un serveur local de base de donnée Postgresql avec le port par défaut (5432). Pour tester directement, il est nécessaire de construire sur ce serveur local une nouveau base de donnée avec comme nom, comme nom “flyway” et “liquibase”.  Il est très facile d’adapter la configuration à votre situation.

La migration de base de donnée: Mais pourquoi ?

On utilise différents systèmes pour versionner notre code source  (git, svn …). Ce code changeant dépend d’une base de donnée. Cette base évolue aussi au niveau de la structure et des données. Ces changements peuvent avoir leur propre cycle de vie.

Du coup, on va mettre en place un système de version de la base de donnée pour maîtriser ces changements. Je voulais un système utilisable avec Maven.

Flyway: HelloWorld

Flyway est simple, facile à comprendre et mettre en place. Son objectif est d’exécuter une séquences de fichier script SQL ordonné. Les versions des différents scripts dépendent des noms des scripts.

Pour tester tout cela, récuperez les sources Flyway sur le repository. La connection de base de donnée est configurée dans le plugin Maven du pom.xml. Coupez et déplacez le fichier “V2__Add_people.sql” et exécutez la commande Maven “package flyway:migrate”.

Après que la commande Maven est terminée, regardez votre base de donnée “flyway”, la table PERSON se trouvant dans le script “V1__Create_person_table.sql” a été créé.

Remettez votre fichier “V2__Add_people.sql” et réexécutez la commande Maven. Maintenant, votre base est à jour avec ce nouveau script, la table PERSON a du être enrichi de données.

Liquidbase: HelloWorld

Liquidbase est un système bien plus complexe. Il a son propre langage (non SQL), afin de migrer différentes bases de données. Il a des notions de version se trouvant directement dans les scripts (tagDatabase tag=”XXX”). Il est possible de naviguer dans les différentes versions. (choisir une version à mettre en place, rollbacker une version antérieur …)

Dans le plugin maven, on fait référence au fichier de configuration de la base de donnée (liquibase/liquibase.properties) et au fichier des changements ou changelog (liquibase/db-changelog-master.xml). Le changelog peut se découper en différents fichiers (db-changelog-X.X.xml).

Afin de tester tout ceci, exécuter la commande Maven “package liquibase:update” et regardez votre base de donnée “liquibase”, l’ensemble des scripts se sont exécuté et votre base de donnée est à jour (dernière version, version 1.2).

Maintenant, exécutez la commande est “package liquibase:rollback -Dliquibase.rollbackTag=1.0”, la base de donnée est retounée en version 1. Exécutez la commande est “package liquibase:update -Dliquibase.toTag=1.1” et la cette fois été upgradé mais uniquement de la version 1.1.

Conclusion

Voila, un petit résumé rapide de ces deux systèmes, j’espère que cela vous aidera afin de mettre en place votre propre système. Si vous avez des questions, n’hésitez pas à les poser.

Leave a Reply

Your email address will not be published. Required fields are marked *