Migraciones para Java

85

Utilizo tanto Ruby on Rails como Java. Realmente disfruto usando migraciones cuando estoy trabajando en un proyecto de rieles. entonces me pregunto si existe una herramienta similar a las migraciones para Java. Si no existe tal herramienta, ¿es una buena idea usar las migraciones como una herramienta para controlar una base de datos utilizada por un proyecto Java?

Josh Moore
fuente

Respuestas:

8

He usado SchemaUpdate de Hibernate para realizar la misma función que las migraciones. En realidad, es más fácil que las migraciones porque cada vez que inicias tu aplicación, examina la estructura de la base de datos y la sincroniza con tus mapeos para que no haya más rake: db: migrate step y tu aplicación nunca puede estar desincronizada con la base de datos que está ejecutando en contra. Los archivos de mapeo de Hibernate no son más complejos que las migraciones de Rails, por lo que incluso si no usó Hibernate en la aplicación, podría aprovecharlo. La desventaja es que no es tan flexible en cuanto a retroceder, migrar hacia abajo, ejecutar declaraciones DML. Como se señaló en los comentarios, tampoco suelta tablas o columnas. Ejecuto un método separado para hacerlo manualmente como parte del proceso de inicialización de Hibernate.

Sin embargo, no veo por qué no puede usar las migraciones de Rails; siempre que no le importe instalar la pila (Ruby, Rake, Rails), no tendrá que tocar su aplicación.

Brian Deterling
fuente
22
No lo sincroniza al 100%. Esto no columnas alterar, borrar o columnas mesas, etc. FKs remove
cherouvim
88

Para una comparación de características entre

  • Flyway
  • Liquibase
  • migración c5-db
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

echa un vistazo a http://flywaydb.org

Este debería ser un buen comienzo para que usted y cualquier otra persona seleccione la herramienta adecuada para el trabajo.

Axel Fontaine
fuente
2
Oye, no estaba al tanto de Flyway. Parece bastante interesante y lo veré más de cerca. ¡Gracias por mencionar Flyway!
Pascal Thivent
@Pascal Thivent ¡Gracias por tu comentario! Si lo evalúa, me complacerá escuchar su opinión / crítica / sugerencias al respecto, ya sea aquí o en el rastreador de problemas de Flyway :-) También consideraré agregar DbMaintain a la matriz de comparación, ya que parece una gran competidor ...
Axel Fontaine
Seguro que lo haré. Y gracias por agregar DbMaintain a la comparación, es muy bueno tener una matriz de este tipo.
Pascal Thivent
3
Gracias por publicar esto. Acabo de empezar a usar Flyway hoy. Anteriormente usé liquibase y en un proyecto desarrollaron su propia solución. Flyway es lo que esperaba que fuera liquibase. Simple, sin xml, y puedo escribir migraciones más complejas en java. Perfecto. Esperando el apoyo de las hormigas.
nogridbag
1
La versión actual del sitio web parece solo comparar Flyway, Liquibase y MyBatis. ¿La comparación completa todavía está disponible en otros lugares?
Zero3
13

Liquibase es otro proyecto en este dominio que vale la pena revisar.

Adam Monsen
fuente
10

Grails tiene una utilidad dbmigrate que sigue el modelo de Rails. Dado que está implementado en Groovy, debería poder usarlo desde cualquiera de sus proyectos Java.

Kyle Burton
fuente
6

Me encontré con esta publicación mientras investigaba la misma pregunta. Todavía no he llegado a ninguna conclusión sobre la mejor herramienta o enfoque, pero una herramienta con la que me he encontrado y que no se ha mencionado en otras respuestas hasta ahora es dbdeploy . Me interesaría leer las comparaciones de estas herramientas.

Algunos otros recursos relevantes: la publicación algo envejecida de Martin Fowler y Pramod Sadalage sobre el diseño de bases de datos evolutivas , y el libro Refactoring Databases: Evolutionary Database Design de Sadalage y Scot Ambler.

Encanto
fuente
6

También hay dos implementaciones independientes de migraciones similares a rieles para Java:

1) Migraciones basadas en Maven de Carbon Five

2) Tareas basadas en hormigas de Hashrocket (mi favorito personal)

Aunque estos paquetes se escribieron específicamente para Maven y Ant, con un poco de trabajo puede adaptarlos a casi cualquier cosa.

Winky
fuente
5
Hashrocket no ha sido tocado desde 2007. El producto de migración de c5-db de Carbon Five no se ha actualizado desde 2010.
Verde
4

Migrate4j parece un candidato, pero el proyecto no parece lo suficientemente maduro para su uso en producción.

reacuna
fuente
2

También está DbMaintain, que se desarrolló inicialmente dentro de Unitils, pero ahora es un proyecto dedicado. Actualmente lo estamos usando y estamos muy satisfechos (lo que no significa que no haya buenas alternativas). Enumero más de ellos en mi base de datos + marcadores de migración (con un enfoque en las herramientas que admiten Maven).

Pascal Thivent
fuente
1
Herramientas como esa nos ayudarán a desarrollarnos de manera más rápida y segura
Arthur Ronald
@Arthur Sí, es muy bueno que también tengamos algunas herramientas como esa. Las actualizaciones de esquemas en cascada de un entorno a otro ahora son un placer para nosotros :)
Pascal Thivent