【问题标题】:migrate database schema on update of Java EE application在 Java EE 应用程序更新时迁移数据库模式
【发布时间】:2012-04-27 01:17:45
【问题描述】:

我有一个使用 SQL Server Express 作为后端数据库的 Java EE 应用程序。 当我们部署新版本时,有时我们需要更改数据库:添加表、添加列、删除列、合并表、合并列等。

直到今天,我们都使用离线 SQL 脚本来修改数据库,但这种解决方案不可扩展且非常容易出错。

我们开始使用具有@PostConstruct 修饰方法的单例启动bean 来添加和删除系统在部署期间使用的数据。

我们现在还想发布 DML 语句,以便我们可以在部署期间升级我们的数据库并一劳永逸地消除 SQL 脚本。

  1. 有没有人尝试过,这是好的方向吗?
  2. 我们应该使用 entityManager.unwrap 方法还是简单地将 JDBC DataSource 资源注入到我们的单例启动 bean 中?

【问题讨论】:

标签: database jakarta-ee glassfish dbmigrate


【解决方案1】:

我们最近开始使用 并且对它非常满意。 documentation is very good。简而言之:您包含一组带有版本的 SQL 脚本。 Flyway 引擎将拾取尚未应用的 SQL 脚本(创建了一个特殊的元数据表)并运行它们。您可以使用带有版本的 SQL 或纯 Java。

【讨论】:

  • 谢谢,我们会检查的。祝你有美好的一天。
【解决方案2】:

除了 Tomasz 的回答,您还可以使用LiquiBase。它提供的解决方案迫使开发人员对他们的模式更改进行“版本控制”,因此当您最终投入生产时,您将拥有一个完全可理解的模式更改日志。然后,您可以使用 LiquiBase 将该更改日志或其任何子集应用到生产数据库。您还可以回滚更改日志的子集。

它可以处理多种开箱即用的更改,还可以使用自定义迁移 java 类。

我自己从未使用过它,但它从 2007 年开始开源。

这是一个快速的overview

【讨论】:

    【解决方案3】:

    为了最终确定数据库迁移工具列表,我对solidbase 非常满意。我们将它作为部署脚本的一部分启动,但在单例 bean 中启动它的想法非常有趣。 Solidbase 的 wiki 没有记录此类嵌入式使用,但您正在寻找源代码类 Runner 的快速浏览。

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2013-03-28
      • 2012-08-16
      相关资源
      最近更新 更多