【问题标题】:How to ship database updates?如何发送数据库更新?
【发布时间】:2011-04-15 08:04:38
【问题描述】:

我有一个通过休眠使用数据库的 Java 应用程序(通用)。我通过 jar 将它运送给客户。向客户发送数据库更新(模式和数据)的最佳方式是什么? 考虑到客户端可以有我的应用程序的不同版本,并且更新必须是自动的,无需用户支持。 如果应用程序是用 grails 编写的?

【问题讨论】:

标签: java hibernate grails


【解决方案1】:

有一个名为 Tapestry5-db-migrations 的 Rails 迁移的 Java 端口(仅依赖于 Tapestry5 ioc)

https://github.com/spreadthesource/tapestry5-db-migrations/

【讨论】:

    【解决方案2】:

    您可以在您的发行版中发布 Ruby 和 Active Record 迁移,并让您的更新程序执行新的迁移。

    【讨论】:

      【解决方案3】:

      正如@user779 所说,以某种格式保持每次更改是可行的方法。 Grails documentation 提到了几个库,它们可能会完成一些艰苦的工作:LiquiBaseDbMigrate

      【讨论】:

      • 如果我不使用 grails?
      • LiquiBase 和 DbMigrate 不是 Grails 特定的 - 我只是链接到每个 Grails 插件。看看他们的网站!
      【解决方案4】:

      您可以通过跟踪当前架构版本(即修订号)然后使用补丁文件将架构升级到下一个版本来做到这一点。您可以继续以增量方式应用补丁,直到达到新的 prod/update 版本。

      例如 假设客户处于修订版 5。您已经发布了修订版 10 和 12,但他只更新到最新版本 - 15。

      你可以这样做:

      foreach rev in [clientRev ... currentRev]:
         apply rev.patch
      

      因此,您将应用补丁以将其提升至 rev 10;然后另一个将其带到第 12 版;然后另一个将其带到第 15 版;

      如果其他客户端已经是第 12 版,他们只需要应用最后一个补丁。

      【讨论】:

      • 这是肯定的。但我必须自己实现它?这是一个非常普遍的问题,有解决方案吗?这就像 Rails 中的数据库迁移,不同之处在于,在 ruby​​ on rails 中,默认情况下它是由 rails 生成的。
      猜你喜欢
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2012-02-08
      • 2017-03-18
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多