数据库 - 远程合作开发时如何同步每个人的表结构(Java Spring环境)
黄舟
黄舟 2017-04-17 11:16:38
0
3
432

平时公司内开发都是使用同一数据库,现在需要和别人远程合作开发,如何能同步两者开发时表结构的修改?.NET中的EntityFramework和RoR中ActiveRecord提供的脚手架工具都可以自动跟踪历史修改,但是Java中的Hibernate似乎没有对应的功能。

现在能想到的是下面方案
1.用版本管理同步一份SQL文件,然后用diff工具比较再修改表结构。
2.用版本管理工具管理脚本,每一次变更就多一个脚本。这样省掉了比较,然后手写更改代码。但是似乎不容易跟踪从那个文件开始执行。


@greatghoul 提出了可以使用其他成熟的数据库迁移工具来维护数据库,比如单单用Django,来维护数据库迁移。且提供了一可用的迁移工具,参见 Alembic

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信 (3)
阿神

Java 里面似乎没有什么好的 Database Migration 工具。

可以尝试下 Python 的 Alembic 或者 Rails 的 AcitveRecord Migration

单独建个项目,用来维护 Migration 脚本,然后每次有更新就执行将数据库结构同步到最新版就好了。

当然,你也可以搜索下 Java 的 Migration 工具,比如 flywaydb,有兴趣的话,可以来听一听。


如果你在西安,本周六(12月14日)下午1:30,我们GDG-Xian 会在零一广场百怡咖啡中有一个活动,我正好有一个 Alembic Database Migration 的话题,有时间的话,不妨来听一听。

いいねを押す+0
    Ty80

    我们目前的做法:

    1. 有两个版本 a, b
    2. 部署版本a

      1. 利用hbm2ddl基于a版本生成schema.sql
      2. 执行schema.sql创建database和表等
      3. 使用liquibase执行自定义default.changelog.xml装入初始化数据
    3. 升级版本a至b

      1. 利用hbm2ddl基于b版本生成shcema.sql
      2. 执行b版本的schema.sql创建tmp_database
      3. 使用liquibase的diff,比较database和tmp_database,生成diff.changelog.xml
      4. 移除tmp_database
      5. 使用liquibase的update, 执行自定义的pre-update.chagnelog.xml,解决一些无法自动升级的问题,比如说改变字段名,添加新字段并设置初始值等
      6. 使用liquibase的update,执行diff.changelog.xml完成数据库的升级
      7. 使用liquibase的update, 执行自定义的post-update.changelog.xml, 完成一些其他操作
      8. 完成升级
    • 设置hibernate的hibernate.hbm2ddl.auto为update,这样一些小问题也会fix,可以尝试不设置看会发生什么问题
    いいねを押す+0
      左手右手慢动作

      一般是提交SQL文件,同时写一段脚本或代码,在每次服务启动的时候自动更新数据库
      对于J2EE来说,Hibernate有专门的同步功能,每次服务启动时,可以按照PO的结构自动刷新数据库结构,无需脚本和SQL文件

      いいねを押す+0
        最新のダウンロード
        詳細>
        ウェブエフェクト
        公式サイト
        サイト素材
        フロントエンドテンプレート
        私たちについて 免責事項 Sitemap
        PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!