Java的迁移

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

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

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

对于一个function之间的比较

  • 迁飞
  • Liquibase
  • C5-DB-迁移
  • dbdeploy
  • MyBatis的
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

看看http://flywaydb.org

这对于您和其他人来说是一个好的开始,可以为工作select正确的工具

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

Grails有一个dbmigrate实用程序,它是Rails中的一个。 由于它是在Groovy中实现的,所以您应该可以从任何Java项目中使用它。

Java还有两个独立的rails类迁移实现:

1)基于Maven的Carbon Five迁移

2) Hashrocket基于Ant的任务(我个人最喜欢的)

虽然这些包是专门为Maven和Ant编写的,但有些工作可以使它们适应任何东西。

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

其他一些相关资源:Martin Fowler和Pramod Sadalage在进化数据库devise方面有些过时了,还有Sadalage和Scot Ambler的“ 重构数据库:进化数据库devise ”一书。

Migrate4j似乎是一个候选人,但是这个项目对于生产使用来说看起来还不够成熟。

也有最初在Unitils内部开发的DbMaintain,但现在是一个专门的项目。 我们正在使用它,并且非常满意(这并不意味着没有任何好的select)。 我在我的数据库+迁移书签中列出了更多的内容(着重于支持Maven的工具)。