2008-09-25 24 views
81

Utilizo Ruby on Rails y Java. Realmente disfruto el uso de migraciones cuando estoy trabajando en un proyecto de rieles. así que me pregunto si hay una herramienta de migraciones para Java. Si no existe tal herramienta, ¿es una buena idea usar migraciones como herramienta para controlar una base de datos utilizada por un proyecto Java?Migraciones para Java

Respuesta

7

He utilizado Hibernate's SchemaUpdate para realizar la misma función que las migraciones. En realidad es más fácil que 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 un rake adicional: db: migrate step y tu aplicación nunca estará fuera de sincronización 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 usara 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ñala en los comentarios, tampoco se sueltan tablas o columnas. Ejecuto un método diferente para hacer esos manualmente como parte del proceso de inicialización de Hibernate.

No veo por qué no podría usar las migraciones de Rails, siempre y cuando no le importe instalar la pila (Ruby, Rake, Rails), no tendría que tocar su aplicación.

+18

No lo sincroniza al 100%. No altera columnas, elimina columnas o tablas, elimina FK, etc. – cherouvim

10

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

7

También hay dos implementaciones independientes de las migraciones rieles como para Java:

1) migraciones basadas en Maven desde Carbon Five

2) tareas basadas en la hormiga de Hashrocket (mi favorito personal)

Aunque estos paquetes fueron escritos específicamente para Maven and Ant, con algo de trabajo puedes adaptarlos a casi cualquier cosa.

+2

Hashrocket no se ha modificado desde 2007. El producto c5-db-migration de Carbon Five no se ha actualizado desde 2010. – Green

12

Liquibase es otro proyecto en este dominio que vale la pena echarle un vistazo.

4

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

6

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

Algunos otros recursos relevantes: Martin Fowler y la publicación algo envejecida de Pramod Sadalage en Evolutionary Database Design, y el libro Refactoring Databases: Evolutionary Database Design por Sadalage y Scot Ambler.

86

Para una comparación característica entre

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

echar un vistazo a http://flywaydb.org

Este debe ser un buen comienzo para usted y cualquier otra persona a seleccionar la herramienta adecuada para el trabajo

+1

Oye, no sabía de Flyway. Se ve bastante interesante y voy a echarle un vistazo más de cerca. Gracias por mencionar Flyway! –

+0

@Pascal Thivent ¡Gracias por tu comentario! Si lo evalúa, me gustaría escuchar su opinión/crítica/sugerencias al respecto, ya sea aquí o en el rastreador de problemas de Flyway :-) También buscaré agregar DbMaintain a la matriz de comparación, ya que se ve como un gran competidor ... –

+0

Claro, lo haré. Y gracias por agregar DbMaintain a la comparación, es muy agradable tener una matriz así. –

2

También hay 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 ninguna buena alternativa). Enumero más de ellos en mis database+migration marcadores (con un enfoque en las herramientas que soportan Maven).

+0

Este tipo de herramientas nos ayudarán a desarrollar de manera más rápida y segura –

+0

@Arthur Sí, es algo muy bueno que tengamos algunas herramientas como esa también. Actualizaciones de esquema en cascada de un entorno a otro ahora es un placer para nosotros :) –

Cuestiones relacionadas