Java迁移方案

86

我同时使用Ruby on Rails和Java. 当我在Rails项目中工作时,我非常喜欢使用迁移(migrations)。所以我想知道是否有类似于Rails的迁移(migrations)工具可用于Java?如果没有这样的工具,那么使用迁移(migrations)作为控制Java项目中使用的数据库的工具是不是一个好主意?

8个回答

89

要进行功能比较,可以考虑以下工具:

  • Flyway
  • Liquibase
  • c5-db-migration
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • AutoPatch

有关这些工具的详细比较,请参阅http://flywaydb.org

这应该是您和其他人为工作选择正确工具的良好起点。


2
嘿,我之前不知道Flyway。它看起来非常有趣,我会仔细研究一下。谢谢提到Flyway! - Pascal Thivent
3
谢谢发布这篇文章。我今天刚开始使用Flyway。之前我用过Liquibase,在一个项目中他们自己打造了解决方案。Flyway是我原本期望Liquibase拥有的东西。它简单易用,没有xml,而且我可以用Java编写更复杂的迁移操作。完美。期待后续加入Ant支持。 - nogridbag
1
网站的当前版本似乎只比较了Flyway、Liquibase和MyBatis。完整的比较是否仍然可以在其他地方找到? - Zero3
@Zero3 其他工具已经多年没有更新了。您认为应该重新添加哪一个?另外,您觉得哪一部分不客观/准确? - Axel Fontaine
@AxelFontaine 这是非常有用的信息!如果您不介意更新一下,我认为将其添加到您的答案中会是一个很好的补充。我对这些工具都不了解,所以我不知道比较是否准确。就我所知,您的比较可能是完全客观和准确的。但是,当您与比较中的产品之一有强烈的个人联系时,披露这一点会很好。 - Zero3
显示剩余6条评论

13

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


10

Grails具有类似Rails的dbmigrate实用程序。由于它是用Groovy实现的,所以您应该能够在任何Java项目中使用它。


9
我使用Hibernate的SchemaUpdate来执行与迁移相同的功能。实际上比迁移更容易,因为每次启动应用程序时,它都会检查数据库结构并将其与映射同步,因此没有额外的rake:db:migrate步骤,您的应用程序永远不会与正在运行的数据库不同步。Hibernate映射文件并不比Rails迁移复杂,因此即使您没有在应用程序中使用Hibernate,也可以利用它。缺点是它在回滚、迁移下降、运行DML语句方面不够灵活。正如评论中指出的那样,它也不能删除表或列。我运行一个单独的方法,在Hibernate初始化过程中手动执行这些操作。
我认为你也可以使用Rails迁移 - 只要你不介意安装堆栈(Ruby,Rake,Rails),你就不必触及你的应用程序。

22
它无法完全同步。它不会更改列、删除列或表、移除FK等。 - cherouvim

6

6

还有两个独立的Java实现类似于Rails的迁移:

1) 基于Maven的迁移来自Carbon Five

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

虽然这些包是专门为Maven和Ant编写的,但是只要进行一些修改,就可以将它们适应于几乎任何内容。


5
Hashrocket自2007年以来没有更新过。Carbon Five的c5-db-migration产品自2010年以来也没有更新过。 - Green

4

Migrate4j 看起来是一个备选方案,但该项目似乎还不够成熟以用于生产环境。


2

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


1
这样的工具将帮助我们更快速、更安全地开发。 - Arthur Ronald
@Arthur 是的,我们有这样的工具确实是一件好事。从一个环境到另一个环境的级联模式更新现在对我们来说是一种乐趣 :) - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接