rake db 的 Java EE 替代方案:迁移 [关闭]

Posted

技术标签:

【中文标题】rake db 的 Java EE 替代方案:迁移 [关闭]【英文标题】:Java EE alternatives for rake db:migrate [closed] 【发布时间】:2013-03-21 14:34:08 【问题描述】:

:) 对不起我的英语:(

我不是 RoR 的用户,但我看到了我的朋友如何编程 :)。他生成特殊文件,跟踪他的数据库中的变化。之后,他运行 rake db:migrate 和特殊实用程序将更改应用到数据库。

我学习 Java EE,我想拥有相同的功能,因为我需要在不同的计算机上开发我的应用程序(在家里、在我的女孩家、在笔记本电脑上等),所以我想拥有相同的文件( db 更改)在 VCS 目录中,并将它们应用到不同的机器上。

我知道,liquibase 具有该功能,但我不想手动为 liquibase 编写 XML 文件 :(。对于 DB 设计,我想使用 NetBeans 或 mysql Workbench(或类似工具)。

如果重要的话,我会使用 Java EE 6、Netbeans 7.3、MySQL、Windows、MySQL Workbench。 我解决问题的最佳方法是什么? :)

【问题讨论】:

【参考方案1】:

liquibase是一个开源的java数据库迁移工具。你提到不想写 xml,Liquibase 支持 yml。

【讨论】:

请不要只发布一些工具或库作为答案。至少在答案本身中展示how it solves the problem。【参考方案2】:

有点晚了,但万一这对某人有用:数据库迁移通常是一个强大的概念,可以(几乎)毫不费力地将开发数据库更改应用于多个目标,例如登台和生产。但是,对于您描述的场景,我会考虑使用mysqldump -ujohn.smith -pv3ryS3curE dbname > relative/or/absolute/path/to/dump.sql。导入是mysql -ujohn.smith -pv3ryS3curE dbname < dump.sql 的问题。这可以在 POSIX 兼容平台上使用管道 | 通过 SSH 完成。如果您为此编写一个脚本,您可以设置一个命令,其中一个命令将您的最新转储放到 Dropbox 中,另一个脚本从同一个 Dropbox 或您可能用于在计算机之间传输文件的任何其他内容进行更新。或者在云中运行您的数据库服务器,并为您的所有计算机提供相同的数据库(前提是具有持续的互联网连接)。

【讨论】:

【参考方案3】:

看看 FlyWay。这是一个简单的数据库迁移工具/库。你用纯 SQL 编写迁移。与 liquibase 相比,它更简单(普通 SQL 与 XML),但灵活性稍差一些(您依赖于特定的 SQL 方言)。 http://flywaydb.org/

至于生成模式差异 - (您对另一个答案的评论)我使用 Liquibase 的 diff 命令。它会打印出两个模式之间的差异,但是,它不会打印出从一个模式迁移到另一个模式所需的实际 SQL。虽然可以使用 Liquibase 生成 SQL,但它是两步过程(当我第一次尝试使用 Liquibase 时让我感到困惑)。您需要先生成 changelog xml(使用 diffChangeLog 命令),然后将 changelog xml 转换为实际的 SQL 命令(使用 updateSQL 命令)。

在我的需要数据库迁移的项目中,我使用 FlyWay 进行实际迁移,在开发过程中休眠从实体类生成模式,如果在开发阶段对模式有很多更改,我使用 liquibase 生成我应用于 FlyWay 迁移脚本的架构差异。

【讨论】:

【参考方案4】:

你可以使用MyBatis Schema Migrations,它既简单又强大。

【讨论】:

非常感谢!嗯,但是,也许有任何变体,它集成在 Netbeans 中并且可以生成基于我的实体类和当前版本的 DB 的迁移脚本?

以上是关于rake db 的 Java EE 替代方案:迁移 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

rake db:如果没有版本,迁移不能正常工作

使用 rake db:migrate 迁移数据不会改变它

rake db:schema:load 与迁移

“heroku 运行 rake db:迁移”问题

是否rake db:schema:dump从迁移或数据库本身重新创建schema.rb?

获取:“迁移待定;运行 'bin/rake db:migrate RAILS_ENV=development' 来解决此问题。”克隆和迁移项目后