web-dev-qa-db-fra.com

Migrations pour Java

J'utilise les deux Ruby sur Rails et Java. J'aime vraiment utiliser les migrations lorsque je travaille sur un projet Rails. Je me demande donc s'il existe un outil de migration comme Java. S'il n'y a pas un tel outil, est-ce une bonne idée d'utiliser les migrations comme outil pour contrôler une base de données utilisée par un projet Java?

85
Josh Moore

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, il examine la structure de la base de données et la synchronise avec vos mappages, donc il n'y a pas de rake supplémentaire: db: étape de migration 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 annulation, migration vers le bas, exécution d'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 effectuer manuellement dans le cadre du processus d'initialisation Hibernate.

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

9
Brian Deterling

Pour une comparaison de fonctionnalités entre

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

jetez un oeil à http://flywaydb.org

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

88
Axel Fontaine

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

13
Adam Monsen

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.

10
Kyle Burton

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

1) Migrations basées sur Maven depuis Carbon Five

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

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

6
Winky

J'ai parcouru ce post tout en recherchant la même question. Je n'ai pas encore tiré de conclusion 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 les comparaisons de ces outils.

Quelques autres ressources pertinentes: le post un peu vieillot de Martin Fowler et Pramod Sadalage sur Evolutionary Database Design , et le livre Refactoring Databases: Evolutionary Database Design par Sadalage et Scot Ambler.

6
Kief

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

4
reacuna

Il y a aussi DbMaintain qui a été initialement développé à l'intérieur nitils 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 énumère plus dans mes base de données + migration signets (avec un accent sur les outils supportant Maven).

2
Pascal Thivent