更新Java EE应用时如何迁移数据库模式

4
我有一个Java EE应用程序,它使用SQL Server Express作为后端数据库。当我们部署新版本时,有时需要更改数据库:添加表、添加列、删除列、合并表、合并列等。
直到今天,我们使用离线SQL脚本来修改数据库,但这种解决方案不可扩展且非常容易出错。
我们开始使用一个单例启动bean,该bean具有@PostConstruct装饰的方法,用于在部署期间系统使用的添加和删除数据。
现在,我们还想发出DML语句,以便在部署期间升级我们的数据库,并彻底消除SQL脚本。
1. 有人尝试过吗?这是一个好的方向吗? 2. 我们应该使用entityManager.unwrap方法还是简单地将JDBC DataSource资源注入我们的单例启动bean?

您可以查看一些模式迁移工具的简要比较。https://dev59.com/oUXRa4cB1Zd3GeqPpCHJ#28055590 - gaboroncancio
3个回答

7
我们最近开始使用 ,并且非常满意。文档非常好。简而言之:您可以包含一组带版本的SQL脚本。Flyway引擎将挑选尚未应用的SQL脚本(创建了一个特殊的元数据表)并运行它们。您可以使用带版本的SQL或纯Java。

谢谢,我们会检查它。祝你有美好的一天。 - Ido Ran

6
除了Tomasz的回答外,您还可以使用LiquiBase。它提供的解决方案强制开发人员“版本控制”其模式更改,因此当您最终进入生产环境时,您将拥有一个完全可理解的模式更改日志。然后,您可以使用LiquiBase应用该更改日志或其任何子集到生产数据库中。您还可以回滚更改日志的子集。
它可以处理许多类型的更改,并且还可以使用自定义迁移Java类。
我自己从未使用过,但自2007年以来一直是开源的。
这里是一个概述

3
为了最终确定数据库迁移工具列表,我对solidbase感到非常满意。我们将其作为部署脚本的一部分启动,但在单例bean中启动它的想法也很有趣。Solidbase的wiki没有记录这种嵌入式使用,但是从快速浏览源代码类Runner来看,这就是你要寻找的东西。

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