Migrations de bases de données en Java : aperçu des outils populaires

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Migrations de bases de données en Java : pourquoi et comment ça fonctionne



Le développement de toute application sérieuse en Java est inextricablement lié à l'évolution du schéma de la base de données. Ajout de nouveaux champs, modification des types de données, création d'index — tout cela est inévitable au cours du développement du projet. L'exécution manuelle de scripts SQL sur différents environnements (environnement de développement local, banc d'essai, production) mène rapidement au chaos : les scripts se perdent, sont exécutés dans le mauvais ordre, et la base de données d'une équipe diffère de celle d'une autre. La solution à ce problème — les migrations de bases de données (database migrations).



Les migrations permettent de versionner les modifications du schéma, de les appliquer automatiquement dans le bon ordre et de les annuler si nécessaire. Dans le monde Java, il existe deux leaders incontestés dans ce domaine : Flyway et Liquibase. Examinons-les plus en détail.



Flyway : simplicité et fiabilité



Flyway est un outil de migration léger, simple et puissant. Sa philosophie : « Les migrations sont simplement du SQL ou des classes Java ». Les principes de fonctionnement de base :



  • Versionnage : chaque fichier de migration possède un numéro de version unique (par exemple, V1__create_users.sql, V2__add_email.sql).
  • Ordre d'exécution : Flyway suit les migrations appliquées dans une table spéciale (flyway_schema_history) et n'applique que les nouvelles.
  • Deux types de migrations : scripts SQL et migrations Java (pour une logique complexe).
  • Annulation : les migrations « undo » sont prises en charge (dans la version payante) ou l'écriture manuelle de scripts d'annulation.


Exemple d'utilisation de Flyway



Supposons que vous deviez créer une table d'utilisateurs. Vous créez le fichier db/migration/V1__create_users.sql :



CREATE TABLE users (    id BIGINT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(50) NOT NULL,    email VARCHAR(100) NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);


Ensuite, vous ajoutez une deuxième migration V2__add_age.sql :



ALTER TABLE users ADD COLUMN age INT;


La connexion de Flyway à une application Spring Boot se fait via application.properties :



spring.flyway.enabled=truespring.flyway.locations=classpath:db/migrationspring.datasource.url=jdbc:postgresql://localhost:5432/mydbspring.datasource.username=userspring.datasource.password=pass


Au démarrage de l'application, Flyway vérifiera automatiquement la table d'historique et appliquera toutes les nouvelles migrations. Si une migration a déjà été exécutée, elle sera ignorée.



Liquibase : flexibilité et contrôle



Liquibase est un outil plus flexible et plus puissant qui prend en charge plusieurs formats de description des modifications : XML, YAML, JSON et SQL. Sa caractéristique clé est les changesets (ensembles de modifications).



  • Identifiant unique : chaque changeset possède un id et un author.
  • Génération automatique de SQL : Liquibase peut générer du SQL pour un SGBD spécifique (PostgreSQL, MySQL, Oracle, etc.).
  • Contextes : vous pouvez séparer les migrations pour différents environnements (dev, test, prod).
  • Annulation : chaque changeset peut avoir une instruction d'annulation (rollback).


Exemple d'utilisation de Liquibase



Exemple de changeset au format XML (db/changelog/db.changelog-master.xml) :



<?xml version="1.0" encoding="UTF-8"?><databaseChangeLog    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd">

<changeSet id="1" author="pythonlib"> <

Recommendations