Migrações para Java

86

Eu uso Ruby on Rails e Java. Eu realmente gosto de usar migrações quando estou trabalhando em um projeto Rails. então eu estou me perguntando se existe uma ferramenta de migração como para Java? Se não houver tal ferramenta, é uma boa ideia usar migrações como uma ferramenta para controlar um banco de dados usado por um projeto Java?

Josh Moore
fonte

Respostas:

9

Eu usei o SchemaUpdate do Hibernate para executar a mesma função que as migrações. Na verdade, é mais fácil do que as migrações porque toda vez que você inicia seu aplicativo, ele examina a estrutura do banco de dados e a sincroniza com seus mapeamentos para que não haja rake: db: migrate passo extra e seu aplicativo nunca pode ficar fora de sincronia com o banco de dados que está executando contra. Os arquivos de mapeamento do Hibernate não são mais complexos do que as migrações do Rails, então mesmo que você não use o Hibernate no aplicativo, você pode tirar vantagem disso. A desvantagem é que não é tão flexível quanto reverter, migrar para baixo e executar instruções DML. Conforme apontado nos comentários, ele também não descarta tabelas ou colunas. Eu executo um método separado para fazer isso manualmente como parte do processo de inicialização do Hibernate.

Eu não vejo porque você não pode usar migrações Rails - contanto que você não se importe em instalar a pilha (Ruby, Rake, Rails), você não terá que mexer no seu aplicativo.

Brian Deterling
fonte
22
Não sincroniza 100%. Não altera colunas, exclui colunas ou tabelas, remove FKs etc.
cherouvim
89

Para uma comparação de recursos entre

  • Flyway
  • Liquibase
  • migração c5-db
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

dê uma olhada em http://flywaydb.org

Este deve ser um bom começo para você e qualquer outra pessoa selecionar a ferramenta certa para o trabalho

Axel Fontaine
fonte
2
Ei, eu não sabia da Flyway. Parece muito interessante e vou dar uma olhada nisso. Obrigado por mencionar a Flyway!
Pascal Thivent
@Pascal Thivent Obrigado pelo seu comentário! Se você avaliá-lo, ficarei feliz em ouvir sua opinião / crítica / sugestões sobre ele, aqui ou no rastreador de problemas da Flyway :-) Também considerarei a adição de DbMaintain à matriz de comparação, pois parece um ótimo concorrente ...
Axel Fontaine
Claro, eu vou. E obrigado por adicionar DbMaintain à comparação, é muito bom ter essa matriz.
Pascal Thivent
3
Obrigado por postar isso. Comecei a usar o Flyway hoje. Eu já usei liquibase e em um projeto eles lançaram sua própria solução. Flyway é o que eu esperava que o liquibase fosse. Simples, sem xml e posso escrever migrações mais complexas em java. Perfeito. Ansioso por suporte de formigas.
nogridbag de
1
A versão atual do site parece comparar apenas Flyway, Liquibase e MyBatis. A comparação completa ainda está disponível em outro lugar?
Zero3
13

Liquibase é outro projeto neste domínio que vale a pena conferir.

Adam Monsen
fonte
10

Grails tem um utilitário dbmigrate que segue o padrão do Rails. Como é implementado no Groovy, você deve ser capaz de usá-lo a partir de qualquer um de seus projetos Java.

Kyle Burton
fonte
6

Eu encontrei este post enquanto pesquisava a mesma questão. Ainda não cheguei a nenhuma conclusão sobre a melhor ferramenta ou abordagem, mas uma ferramenta que descobri que não foi mencionada em outras respostas até agora é o dbdeploy . Eu estaria interessado em ler quaisquer comparações dessas ferramentas.

Alguns outros recursos relevantes: a postagem um tanto antiga de Martin Fowler e Pramod Sadalage sobre Evolutionary Database Design , e o livro Refactoring Databases: Evolutionary Database Design de Sadalage e Scot Ambler.

Kief
fonte
6

Existem também duas implementações independentes de migrações semelhantes a rails para Java:

1) Migrações baseadas em Maven do Carbon Five

2) Tarefas baseadas em Ant do Hashrocket (meu favorito)

Embora esses pacotes tenham sido escritos especificamente para Maven e Ant, com algum trabalho você pode adaptá-los para quase tudo.

Winky
fonte
5
Hashrocket não é tocado desde 2007. O produto de migração c5-db do Carbon Five não é atualizado desde 2010.
Verde
4

Migrate4j parece um candidato, mas o projeto não parece maduro o suficiente para uso em produção.

reacuna
fonte
2

Há também o DbMaintain, que foi inicialmente desenvolvido dentro da Unitils, mas agora é um projeto dedicado. No momento, estamos usando e estamos muito satisfeitos (o que não significa que não haja boas alternativas). Eu listo mais deles em meu banco de dados + favoritos de migração (com foco em ferramentas de suporte Maven).

Pascal Thivent
fonte
1
Ferramentas como essa nos ajudarão a desenvolver com mais rapidez e segurança
Arthur Ronald
@Arthur Sim, é muito bom termos algumas ferramentas como essa também. O cascateamento de atualizações de esquema de um ambiente para outro agora é um prazer para nós :)
Pascal Thivent