我同时使用 ruby on rails 和 Java。当我在做一个 Rails 项目时,我真的很喜欢使用迁移。所以我想知道是否有类似 Java 工具的迁移?如果没有这样的工具,使用迁移作为控制 Java 项目使用的数据库的工具是个好主意吗?
8 回答
对于之间的功能比较
- 飞路
- Liquibase
- c5-db-迁移
- 数据库部署
- 米巴蒂斯
- 迁移数据库
- 迁移4j
- 数据库维护
- 自动补丁
这应该是您和其他任何人为工作选择正确工具的良好开端
Liquibase是该领域中另一个值得一试的项目。
我使用 Hibernate 的 SchemaUpdate 来执行与迁移相同的功能。它实际上比迁移更容易,因为每次启动应用程序时,它都会检查数据库结构并将其与映射同步,因此没有额外的 rake:db:migrate 步骤,并且您的应用程序永远不会与正在运行的数据库不同步反对。Hibernate 映射文件并不比 Rails 迁移复杂,因此即使您没有在应用程序中使用 Hibernate,也可以利用它。缺点是它不像回滚、向下迁移、运行 DML 语句那样灵活。正如评论中所指出的,它也不会删除表或列。作为 Hibernate 初始化过程的一部分,我运行了一个单独的方法来手动执行这些操作。
我不明白为什么你不能使用 Rails 迁移——只要你不介意安装堆栈(Ruby、Rake、Rails),你就不必接触你的应用程序。
Java 的类似 Rails 的迁移也有两个独立的实现:
1) 来自碳五的基于 Maven 的迁移
2) Hashrocket中基于 Ant 的任务(我个人最喜欢的)
尽管这些包是专门为 Maven 和 Ant 编写的,但通过一些工作,您可以使它们适应任何东西。
我在研究同一个问题时遇到了这篇文章。我还没有得出关于最佳工具或方法的任何结论,但是到目前为止,我遇到的一个在其他答案中没有提到的工具是dbdeploy。我有兴趣阅读这些工具的任何比较。
其他一些相关资源:Martin Fowler 和 Pramod Sadalage 关于进化数据库设计的一些陈旧的帖子,以及由 Sadalage 和 Scot Ambler 撰写的《重构数据库:进化数据库设计》一书。
Migrate4j似乎是一个候选者,但该项目看起来还不够成熟,无法用于生产。
还有DbMaintain,它最初是在 Unitils 内部开发的,但现在是一个专用项目。我们目前正在使用它并且非常满意(这并不意味着没有任何好的替代品)。我在我的数据库+迁移书签中列出了更多(重点是支持 Maven 的工具)。