Migrations pour Java

85

J'utilise à la fois ruby ​​sur rails et Java. J'aime vraiment utiliser les migrations lorsque je travaille sur un projet de rails. alors je me demande s'il existe un outil de migration comme pour Java? S'il n'existe pas un tel outil, est-ce une bonne idée d'utiliser les migrations comme un outil pour contrôler une base de données utilisée par un projet Java?

Josh Moore
la source

Réponses:

8

J'ai utilisé SchemaUpdate d'Hibernate pour effectuer la même fonction que les migrations. C'est en fait plus facile que les migrations car chaque fois que vous démarrez votre application, elle examine la structure de la base de données et la synchronise avec vos mappages afin qu'il n'y ait pas de rake supplémentaire: db: migrate step et votre application ne peut jamais être désynchronisée avec la base de données qu'elle exécute contre. Les fichiers de mappage Hibernate ne sont pas plus complexes que les migrations Rails, donc même si vous n'avez pas utilisé Hibernate dans l'application, vous pouvez en profiter. L'inconvénient est qu'il n'est pas aussi flexible que de revenir en arrière, de migrer vers le bas, d'exécuter des instructions DML. Comme indiqué dans les commentaires, il ne supprime pas non plus les tables ou les colonnes. J'exécute une méthode distincte pour les faire manuellement dans le cadre du processus d'initialisation Hibernate.

Je ne vois pas pourquoi vous ne pouvez pas utiliser les migrations Rails - tant que cela ne vous dérange pas d'installer la pile (Ruby, Rake, Rails), vous n'aurez pas à toucher votre application.

Brian Deterling
la source
22
Il ne le synchronise pas à 100%. Il ne modifie pas les colonnes, ne supprime pas les colonnes ou les tables, ne supprime pas les FK, etc.
cherouvim
88

Pour une comparaison des fonctionnalités entre

  • S'envoler
  • Liquibase
  • migration c5-db
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

jettes un coup d'oeil à http://flywaydb.org

Cela devrait être un bon début pour vous et pour toute autre personne afin de sélectionner le bon outil pour le travail

Axel Fontaine
la source
2
Hé, je n'étais pas au courant de Flyway. Cela semble assez intéressant et je vais l'examiner de plus près. Merci d'avoir mentionné Flyway!
Pascal Thivent
@Pascal Thivent Merci pour votre commentaire! Si vous l'évaluez, je serais heureux d'entendre votre opinion / critique / suggestions à ce sujet, que ce soit ici ou dans le suivi des problèmes de Flyway :-) Je vais également examiner l'ajout de DbMaintain à la matrice de comparaison car il ressemble à un excellent concurrent ...
Axel Fontaine
Bien sûr que oui. Et merci d'avoir ajouté DbMaintain à la comparaison, c'est très agréable d'avoir une telle matrice.
Pascal Thivent
3
Merci d'avoir publié ceci. Je viens de commencer à utiliser Flyway aujourd'hui. J'ai déjà utilisé liquibase et dans un projet, ils ont lancé leur propre solution. Flyway est ce que je m'attendais à ce que la liquibase soit. Simple, pas de xml, et je peux écrire des migrations plus complexes en java. Parfait. Dans l'attente du soutien des fourmis.
nogridbag
1
La version actuelle du site Web semble comparer uniquement Flyway, Liquibase et MyBatis. La comparaison complète est-elle toujours disponible ailleurs?
Zero3
13

Liquibase est un autre projet dans ce domaine qui mérite d'être vérifié.

Adam Monsen
la source
10

Grails a un utilitaire dbmigrate qui est calqué sur celui de Rails. Comme il est implémenté dans Groovy, vous devriez pouvoir l'utiliser à partir de n'importe lequel de vos projets Java.

Kyle Burton
la source
6

J'ai parcouru ce post en recherchant la même question. Je n'ai pas encore tiré de conclusions sur le meilleur outil ou la meilleure approche, mais un outil que j'ai rencontré et qui n'a pas été mentionné dans d'autres réponses jusqu'à présent est dbdeploy . Je serais intéressé de lire toutes les comparaisons de ces outils.

Quelques autres ressources pertinentes: le post quelque peu âgé de Martin Fowler et Pramod Sadalage sur Evolutionary Database Design , et le livre Refactoring Databases: Evolutionary Database Design de Sadalage et Scot Ambler.

Kief
la source
6

Il existe également deux implémentations indépendantes de migrations de type rails pour Java:

1) Migrations basées sur Maven depuis Carbon Five

2) Tâches basées sur Ant de Hashrocket (mon préféré)

Bien que ces packages aient été spécifiquement écrits pour Maven et Ant, avec un peu de travail, vous pouvez les adapter à à peu près n'importe quoi.

Winky
la source
5
Hashrocket n'a pas été touché depuis 2007. Le produit de migration c5-db-migration de Carbon Five n'a pas été mis à jour depuis 2010.
Vert
4

Migrate4j semble être un candidat, mais le projet ne semble pas assez mature pour une utilisation en production.

Reacuna
la source
2

Il y a aussi DbMaintain qui a été initialement développé dans Unitils mais qui est maintenant un projet dédié. Nous l'utilisons actuellement et sommes très satisfaits (ce qui ne veut pas dire qu'il n'y a pas de bonnes alternatives). J'en répertorie plus dans ma base de données + les favoris de migration (en mettant l'accent sur les outils prenant en charge Maven).

Pascal Thivent
la source
1
Des outils comme celui-là nous aideront à nous développer plus rapidement et en toute sécurité
Arthur Ronald
@Arthur Oui, c'est une très bonne chose que nous ayons aussi des outils comme ça. Mettre à jour les schémas en cascade d'un environnement à l'autre est maintenant un plaisir pour nous :)
Pascal Thivent