2008-09-25 51 views
81

我在Rails和Java上都使用ruby。当我在一个rails项目上工作时,我非常喜欢使用migrations。所以我想知道是否有类似Java的工具的迁移?如果没有这样的工具,使用迁移作为控制Java项目使用的数据库的工具是一个好主意吗?Java的迁移

回答

7

我已经使用Hibernate的SchemaUpdate来执行与迁移相同的功能。它实际上比迁移更容易,因为每次启动应用程序时,它都会检查数据库结构并将其与映射进行同步,因此不需要额外的耙:db:migrate步骤,并且您的应用程序永远不会与正在运行的数据库不同步反对。 Hibernate映射文件不比Rails迁移更复杂,所以即使你没有在应用中使用Hibernate,你也可以利用它。缺点是它不像回滚,迁移,运行DML语句那样灵活。正如评论中指出的那样,它也不会删除表或列。我运行一个单独的方法来手动完成这些工作,作为Hibernate初始化过程的一部分。

我不明白你为什么不能使用Rails迁移 - 只要你不介意安装栈(Ruby,Rake,Rails),你就不必触摸你的应用程序。

+18

它不会100%同步它。它不会更改列,删除列或表格,删除FK等。 – cherouvim 2009-08-26 20:06:16

10

Grails有一个dbmigrate实用程序,它是来自Rails之后的图案。由于它是在Groovy中实现的,所以您应该能够从任何Java项目中使用它。

7

还有的轨道状迁移两个独立实现的Java:

Carbon Five

2)基于Ant任务

1)基于Maven的迁移从Hashrocket(我个人最喜欢的)

尽管这些包专门为Maven和Ant编写,但有些工作可以将它们适应任何东西。

+2

自2007年以来Hashrocket并未触及。自2010年以来Carbon Five的c5-db迁移产品尚未更新。 – Green 2014-07-15 20:46:25

12

Liquibase是另一个在这个领域值得检查的项目。

4

Migrate4j似乎是一个候选人,但该项目看起来不够成熟,不适合生产使用。

6

我在研究同一个问题时跑过这篇文章。我还没有得出关于最佳工具或方法的任何结论,但是迄今为止我没有提到的其他答案中提到的一个工具是dbdeploy。我有兴趣阅读这些工具的任何比较。

其他一些相关资源:Martin Fowler和Pramod Sadalage在Evolutionary Database Design上有些老年人的帖子,以及Sadalage和Scot Ambler的书Refactoring Databases: Evolutionary Database Design

86

对于

  • 之间的功能比较迁飞
  • Liquibase
  • C5-DB-迁移
  • dbdeploy
  • 的MyBatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

看看http://flywaydb.org

这应该是一个良好的开端,为您和其他任何人选择工作

+1

嘿,我没有意识到Flyway。它看起来很有趣,我会仔细看看它。感谢您提及Flyway! – 2010-10-13 13:42:36

+0

@Pascal Thivent感谢您的评论!如果您确实评估过,我很乐意听到您对此的意见/批评/建议,无论是在此处还是在Flyway的问题跟踪器中:-)我还会考虑将DbMaintain添加到比较矩阵中,因为它看起来很棒竞争对手... – 2010-10-14 09:30:33

2

正确的工具也有DbMaintain最初在Unitils内开发,但现在是一个专门的项目。我们目前正在使用它,并且非常满意(这并不意味着没有任何好的选择)。我在我的database+migration书签中列出了更多(其中重点介绍了支持Maven的工具)。