Migrazioni per Java


85

Uso sia ruby ​​on rails che Java. Mi piace molto usare le migrazioni quando lavoro a un progetto rails. quindi mi chiedo se esista uno strumento simile alle migrazioni per Java? Se non esiste uno strumento simile, è una buona idea utilizzare le migrazioni come strumento per controllare un database utilizzato da un progetto Java?

Risposte:


8

Ho usato SchemaUpdate di Hibernate per eseguire la stessa funzione delle migrazioni. In realtà è più facile delle migrazioni perché ogni volta che avvii la tua app, esamina la struttura del database e la sincronizza con le tue mappature, quindi non c'è rake extra: db: passaggio di migrazione e la tua app non può mai essere fuori sincronia con il database in esecuzione contro. I file di mapping di Hibernate non sono più complessi delle migrazioni di Rails, quindi anche se non hai utilizzato Hibernate nell'app, potresti trarne vantaggio. Lo svantaggio è che non è così flessibile quanto il rollback, la migrazione verso il basso, l'esecuzione di istruzioni DML. Come sottolineato nei commenti, inoltre non rilascia tabelle o colonne. Eseguo un metodo separato per eseguirli manualmente come parte del processo di inizializzazione di Hibernate.

Non vedo perché non puoi usare le migrazioni di Rails - finché non ti dispiace installare lo stack (Ruby, Rake, Rails), non dovresti toccare la tua app.


22
Non lo sincronizza al 100%. Non altera colonne, elimina colonne o tabelle, rimuove FK ecc.
cherouvim

88

Per un confronto delle funzionalità tra

  • Vola via
  • Liquibase
  • c5-db-migration
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

dai un'occhiata a http://flywaydb.org

Questo dovrebbe essere un buon inizio per te e per chiunque altro per selezionare lo strumento giusto per il lavoro


2
Ehi, non ero a conoscenza di Flyway. Sembra piuttosto interessante e lo guarderò più da vicino. Grazie per aver menzionato Flyway!
Pascal Thivent

@Pascal Thivent Grazie per il tuo commento! Se lo valuti, sarei felice di sentire la tua opinione / critica / suggerimento al riguardo, qui o nel tracciatore di problemi di Flyway :-) Cercherò anche di aggiungere DbMaintain alla matrice di confronto in quanto sembra un ottimo concorrente ...
Axel Fontaine

Lo farò di sicuro. E grazie per aver aggiunto DbMaintain al confronto, è molto bello avere una tale matrice.
Pascal Thivent

3
Grazie per aver postato questo. Ho appena iniziato a usare Flyway oggi. Ho già utilizzato liquibase e in un progetto hanno lanciato la loro soluzione. Flyway è quello che mi aspettavo fosse liquibase. Semplice, no xml e posso scrivere migrazioni più complesse in java. Perfetto. In attesa di supporto per le formiche.
nogridbag

1
L'attuale versione del sito web sembra confrontare solo Flyway, Liquibase e MyBatis. Il confronto completo è ancora disponibile altrove?
Zero3


10

Grails ha un'utilità dbmigrate che è modellata dopo quella di Rails. Dato che è implementato in Groovy, dovresti essere in grado di usarlo da qualsiasi tuo progetto Java.


6

Mi sono imbattuto in questo post mentre cercavo la stessa domanda. Non sono ancora giunto a conclusioni sul miglior strumento o approccio, ma uno strumento che ho incontrato e che non è stato menzionato in altre risposte finora è dbdeploy . Sarei interessato a leggere eventuali confronti di questi strumenti.

Alcune altre risorse rilevanti: il post piuttosto invecchiato di Martin Fowler e Pramod Sadalage su Evolutionary Database Design e il libro Refactoring Databases: Evolutionary Database Design di Sadalage e Scot Ambler.


6

Esistono anche due implementazioni indipendenti di migrazioni rails per Java:

1) Migrazioni basate su Maven da Carbon Five

2) Attività basate su formiche da Hashrocket (il mio preferito)

Sebbene questi pacchetti siano stati scritti appositamente per Maven e Ant, con un po 'di lavoro puoi adattarli a qualsiasi cosa.


5
Hashrocket non è stato toccato dal 2007. Il prodotto di migrazione c5-db di Carbon Five non è stato aggiornato dal 2010.
Verde

4

Migrate4j sembra un candidato, ma il progetto non sembra abbastanza maturo per l'utilizzo in produzione.


2

C'è anche DbMaintain che è stato inizialmente sviluppato all'interno di Unitils ma ora è un progetto dedicato. Lo stiamo attualmente utilizzando e siamo molto soddisfatti (il che non significa che non ci siano buone alternative). Ne elenco altri nel mio database + segnalibri di migrazione (con particolare attenzione agli strumenti che supportano Maven).


1
Strumenti come questo ci aiuteranno a sviluppare più velocemente e in sicurezza
Arthur Ronald

@ Arthur Sì, è davvero un bene che abbiamo anche degli strumenti del genere. Aggiornare lo schema a cascata da un ambiente all'altro è ora un piacere per noi :)
Pascal Thivent
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.