我有一个 Java EE 应用程序,它使用 SQL Server Express 作为后端数据库。 当我们部署新版本时,有时我们需要更改数据库:添加表、添加列、删除列、合并表、合并列等。
直到今天,我们使用离线 SQL 脚本来修改数据库,但这种解决方案不可扩展且错误修剪率很高。
我们开始使用具有@PostConstruct 装饰方法的单例启动 bean 来添加和删除系统在部署期间使用的数据。
我们现在还想发出 DML 语句,以便我们可以在部署期间升级我们的数据库并一劳永逸地消除 SQL 脚本。
- 有没有人尝试过,这个方向好吗?
- 我们应该使用 entityManager.unwrap 方法还是简单地将 JDBC 数据源资源注入(inject)到我们的单例启动 bean 中?
最佳答案
我们最近开始使用 flyway并且对此非常满意。 documentation is very good .简而言之:您包含一组带有版本的 SQL 脚本。 Flyway 引擎将拾取尚未应用的 SQL 脚本(创建了一个特殊的元数据表)并运行它们。您可以使用带版本的 SQL 或纯 Java。
关于database - 在更新 Java EE 应用程序时迁移数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161776/