如何进行数据库更新的运输?

3

我有一个使用Hibernate连接数据库的Java应用程序(通用)。我通过JAR文件将其发送给客户端。那么,最佳的方式是什么来向客户端提供数据库更新(架构和数据)?需要考虑到客户端可能拥有不同版本的我的应用程序,并且更新必须是自动的,无需用户支持。如果应用程序是用Grails编写的呢?


你想发布一个新的jar包,并在加载jar包时执行迁移吗?或者你有可以执行更新数据库的代码吗? - Jacob Tomaw
请参见https://dev59.com/eHI95IYBdhLWcg3w5SSh - Rob Hruska
我想发布一个新的jar包,并在加载jar包时执行迁移。 - tapioco123
4个回答

3
你可以通过跟踪当前模式版本(即修订号)并拥有一个补丁文件来将模式升级到下一个版本。您可以逐步应用补丁,直到达到新的prod/update版本。
例如,假设客户端处于第5个修订版本。您已经发布了第10和第12个版本,但他只更新到最新的版本--第15个版本。
您可以执行以下操作:
foreach rev in [clientRev ... currentRev]:
   apply rev.patch

您需要将补丁应用到版本10,然后再应用另一个补丁升级到版本12,最后再应用第三个补丁升级到版本15。

如果其他客户端已经在版本12,则只需要应用最后一个补丁即可。


这是确定的。但我必须自己实现它吗?这是一个非常普遍的问题,有没有现成的解决方案?这就像Rails中的数据库迁移,不同之处在于在Ruby on Rails中,我们默认拥有它。 - tapioco123

2
如@user779所说,将每个更改以某种格式保存是正确的方法。 Grails文档提到了一些可能会减轻工作难度的库:LiquiBaseDbMigrate

如果我不使用Grails呢? - tapioco123
1
LiquiBase和DbMigrate并不是Grails特定的 - 我只是为每个Grails插件提供了链接。看看它们的网站! - Nick

0

0

你可以在你的分发中包含 Ruby 和 Active Record 迁移,并让你的更新程序执行新的迁移。


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