【问题标题】:Update Center and Database Change Management for Web ApplicationWeb 应用程序的更新中心和数据库变更管理
【发布时间】:2012-12-05 21:35:10
【问题描述】:

我们有一个使用 Spring/JPA/Hibernate 的 Web 应用程序。目前我们正在使用 SolidBase 进行数据库更改管理,这在托管部署模型中运行良好 - 但是我们现在正在迁移到非托管部署模型,用户将能够在其中下载 Web 应用程序。我们正在为 Web 应用程序构建一个“更新中心”类型的功能,并试图弄清楚我们应该如何应用数据库更改。

理想情况下,我希望应用程序在应用程序启动时应用任何挂起的数据库更改,并且我希望这是我们可以以编程方式编码的东西,但我不想重写 Hibernate 的 SchemaExport 功能来做到这一点。

对于我们如何在我们的应用程序中最好地实现此功能,是否有人有任何建议、模式或最佳实践?

是否有任何更新中心应用程序库可以解决我们的问题(我找不到一个)?

【问题讨论】:

  • 也许您有充分的理由这样做。然而,这是我的两分钱。 如果您要在应用程序启动期间进行架构更新,则需要授予您的“应用程序/用户”帐户数据库所有者访问权限。这可能会暴露您的应用程序中的一些安全漏洞。我建议您不要在应用程序启动期间更改数据库架构。或者至少注意您使用的数据库连接帐户。 就我个人而言,我在应用程序之外进行所有数据库架构更新,即手动 - 但这只是我。
  • 如果管理应用程序的每个人都恰好是 DBA,那就太好了 - 问题是最终用户将维护应用程序。我们需要向应用程序推送更新的能力,并且很可能这些应用程序更新的很大一部分将具有相应的架构更改。已经有一个数据用户和一个模式用户,模式用户只在应用程序启动时专门用于此任务。

标签: java sql hibernate jpa auto-update


【解决方案1】:

我在研究这篇文章时发现了这篇文章

http://www.infoq.com/news/upgrade-frameworks

这让我看到了这篇文章

http://www.jroller.com/mrdon/entry/transparent_sql_schema_migration_with

这最终导致我使用 Apache DdlUtils 和 jroller.com 博客文章中提供的 BeanFactory 解决方案推出了自己的解决方案。

这最终将是一个组件,可以放入任何应用程序,无论是旧的还是新的,以在 Web 应用程序中实现更新功能。它将使用 XML 来应用数据库更新,并且使用 DDL 这意味着该包将适用于任何受支持的数据库。更新程序还将支持对文件系统资源和数据本身的更新(与架构相反)

【讨论】:

    【解决方案2】:

    我不为 BitRock 工作。

    这可能不是您正在寻找的,但我使用InstallBuilder from Bitrock 来管理分布式应用程序的这些类型的更新。这与 PostgreSQL 团队使用的安装程序包相同。让它工作起来非常简单,而且头痛最小。尤其是与其他安装程序相比。

    【讨论】:

    • 这看起来很有趣,但看起来并不能完全解决我遇到的问题。这个难题的独特之处在于它是一个 Web 应用程序,因此它有自己的一组要求,即它必须是可以直接集成到应用程序中的东西。
    • @ChrisSchmidt 您能否详细说明直接集成的含义?我想我在这里断开了连接,因为它是一个分布式应用程序,用户可以拥有一个本地实例,也可以与远程“母舰”进行通信,对吗?
    • 当然——所以直接集成我的意思是功能应该存在于应用程序本身中,而在这个包中它全部在应用程序之外维护。这是一个 Web 应用程序,很可能在无头服务器上运行,这使得 CM 管理的情况不太理想。除了请求更新之外,本地实例不与母舰通信其他。这能回答你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多