Java迁移

时间:2020-03-06 14:41:59  来源:igfitidea点击:

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

解决方案

Grails有一个dbmigrate实用程序,该实用程序是在Rails的dbmigrate实用程序之后进行模式化的。由于它是在Groovy中实现的,因此我们应该可以在任何Java项目中使用它。

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

我不明白为什么我们不使用Rails迁移,尽管我们不介意安装堆栈(Ruby,Rake,Rails),也不必触摸应用程序。

对于Java,有两种独立的类似Rails的迁移实现:

1)从碳五开始的基于Maven的迁移

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

尽管这些软件包是专门为Maven和Ant编写的,但是通过一些工作,我们可以将它们适应几乎所有事物。

Liquibase是该领域中另一个值得一试的项目。

Migrate4j似乎很合适,但该项目看起来还不够成熟,无法用于生产。

在研究相同问题时,我碰到了这篇文章。关于最佳工具或者方法,我尚未得出任何结论,但是到目前为止,我在其他答案中尚未提及的一个工具就是dbdeploy。我有兴趣阅读这些工具的任何比较。

其他一些相关资源:Martin Fowler和Pramod Sadalage撰写的有关演化数据库设计的文章有些过时,并且由Sadalage和Scot Ambler撰写了《重构数据库:演化数据库设计》。

对于之间的功能比较

  • 飞路
  • 液基
  • c5-db迁移
  • dbdeploy
  • Mybatis
  • MIGRATEdb
  • migration4j
  • dbmaintain
  • 自动补丁

看看http://flywaydb.org

对于我们和其他任何人来说,这都是一个不错的开始,为我们选择合适的工具

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