Migrationen für Java

85

Ich benutze sowohl Ruby on Rails als auch Java. Ich benutze Migrationen sehr gerne, wenn ich an einem Rails-Projekt arbeite. Ich frage mich also, ob es ein Migrations-Tool für Java gibt. Wenn es kein solches Tool gibt, ist es eine gute Idee, Migrationen als Tool zur Steuerung einer von einem Java-Projekt verwendeten Datenbank zu verwenden.

Josh Moore
quelle

Antworten:

8

Ich habe das SchemaUpdate von Hibernate verwendet, um dieselbe Funktion wie bei Migrationen auszuführen. Es ist tatsächlich einfacher als Migrationen, da jedes Mal, wenn Sie Ihre App starten, die Datenbankstruktur überprüft und mit Ihren Zuordnungen synchronisiert wird, sodass kein zusätzlicher Rake erforderlich ist: db: Migrationsschritt und Ihre App kann niemals nicht mehr mit der Datenbank synchronisiert sein, die sie ausführt gegen. Zuordnungsdateien für den Ruhezustand sind nicht komplexer als Rails-Migrationen. Selbst wenn Sie Hibernate nicht in der App verwendet haben, können Sie dies nutzen. Der Nachteil ist, dass es nicht so flexibel ist, ein Rollback durchzuführen, nach unten zu migrieren oder DML-Anweisungen auszuführen. Wie in den Kommentaren erwähnt, werden auch keine Tabellen oder Spalten gelöscht. Ich führe eine separate Methode aus, um diese manuell im Rahmen des Hibernate-Initialisierungsprozesses auszuführen.

Ich verstehe nicht, warum Sie Rails-Migrationen nicht verwenden konnten - solange es Ihnen nichts ausmacht, den Stack (Ruby, Rake, Rails) zu installieren, müssen Sie Ihre App nicht berühren.

Brian Deterling
quelle
22
Es synchronisiert es nicht zu 100%. Es ändert keine Spalten, löscht keine Spalten oder Tabellen, entfernt keine FKs usw.
cherouvim
88

Für einen Funktionsvergleich zwischen

  • Weg fliegen
  • Liquibase
  • c5-db-Migration
  • dbdeploy
  • Mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

Schauen Sie sich http://flywaydb.org an

Dies sollte ein guter Anfang für Sie und alle anderen sein, um das richtige Werkzeug für den Job auszuwählen

Axel Fontaine
quelle
2
Hey, mir war Flyway nicht bewusst. Es sieht ziemlich interessant aus und ich werde es mir genauer ansehen. Vielen Dank, dass Sie Flyway erwähnt haben!
Pascal Thivent
@Pascal Thivent Danke für deinen Kommentar! Wenn Sie es bewerten, würde ich mich freuen, Ihre Meinung / Kritik / Vorschläge dazu zu hören, entweder hier oder in Flyways Issue-Tracker :-) Ich werde auch DbMaintain zur Vergleichsmatrix hinzufügen, da es großartig aussieht Konkurrent ...
Axel Fontaine
Natürlich werde ich. Und danke, dass Sie DbMaintain zum Vergleich hinzugefügt haben. Es ist sehr schön, eine solche Matrix zu haben.
Pascal Thivent
3
Vielen Dank für die Veröffentlichung. Ich habe heute gerade angefangen, Flyway zu benutzen. Ich habe zuvor Liquibase verwendet und in einem Projekt haben sie ihre eigene Lösung entwickelt. Flyway ist das, was ich von Liquibase erwartet hatte. Einfach, keine XML, und ich kann komplexere Migrationen in Java schreiben. Perfekt. Ich freue mich auf Ameisenunterstützung.
Nogridbag
1
Die aktuelle Version der Website scheint nur Flyway, Liquibase und MyBatis zu vergleichen. Ist der vollständige Vergleich noch an anderer Stelle verfügbar?
Zero3
10

Grails hat ein dbmigrate- Dienstprogramm, das dem von Rails nachempfunden ist. Da es in Groovy implementiert ist, sollten Sie es in jedem Ihrer Java-Projekte verwenden können.

Kyle Burton
quelle
6

Ich bin auf diesen Beitrag gestoßen, als ich dieselbe Frage recherchiert habe. Ich habe noch keine Schlussfolgerungen über das beste Tool oder den besten Ansatz gezogen, aber ein Tool, auf das ich gestoßen bin und das in anderen Antworten bisher nicht erwähnt wurde, ist dbdeploy . Es würde mich interessieren, Vergleiche dieser Tools zu lesen.

Einige andere relevante Ressourcen: Martin Fowler und Pramod Sadalages etwas gealterter Beitrag zum evolutionären Datenbankdesign und das Buch Refactoring Databases: Evolutionary Database Design von Sadalage und Scot Ambler.

Kief
quelle
6

Es gibt auch zwei unabhängige Implementierungen von Rails-ähnlichen Migrationen für Java:

1) Maven-basierte Migrationen von Carbon Five

2) Ameisenbasierte Aufgaben von Hashrocket (mein persönlicher Favorit)

Obwohl diese Pakete speziell für Maven und Ant geschrieben wurden, können Sie sie mit einigen Arbeiten an nahezu alles anpassen.

Winky
quelle
5
Hashrocket wurde seit 2007 nicht mehr berührt. Das c5-db-Migrationsprodukt von Carbon Five wurde seit 2010 nicht mehr aktualisiert.
Green
4

Migrate4j scheint ein Kandidat zu sein, aber das Projekt sieht für die Verwendung in der Produktion nicht ausgereift aus.

reacuna
quelle
2

Es gibt auch DbMaintain, das ursprünglich in Unitils entwickelt wurde , jetzt aber ein spezielles Projekt ist. Wir verwenden es derzeit und sind sehr zufrieden (was nicht bedeutet, dass es keine guten Alternativen gibt). Ich liste mehr davon in meinen Datenbank- und Migrationslesezeichen auf (mit Schwerpunkt auf Tools, die Maven unterstützen).

Pascal Thivent
quelle
1
Solche Tools helfen uns, uns schneller und sicherer zu entwickeln
Arthur Ronald
@Arthur Ja, es ist sehr gut, dass wir auch solche Tools haben. Das Kaskadieren von
Schemaaktualisierungen