Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 更新JavaEE应用程序时迁移数据库模式_Database_Jakarta Ee_Glassfish_Dbmigrate_Flyway - Fatal编程技术网

Database 更新JavaEE应用程序时迁移数据库模式

Database 更新JavaEE应用程序时迁移数据库模式,database,jakarta-ee,glassfish,dbmigrate,flyway,Database,Jakarta Ee,Glassfish,Dbmigrate,Flyway,我有一个JavaEE应用程序,它使用SQLServerExpress作为后端数据库。 当我们在某个时候部署新版本时,我们需要更改数据库:添加表、添加列、删除列、合并表、合并列等 直到今天,我们仍然使用脱机SQL脚本来修改数据库,但这种解决方案不可扩展,而且错误清除非常困难 我们开始使用一个单例启动bean,它具有@PostConstruct修饰的方法来添加和删除系统在部署期间使用的数据 我们现在还希望发出DML语句,以便在部署期间升级数据库,并一劳永逸地消除SQL脚本 有人尝试过吗,这是个好的方

我有一个JavaEE应用程序,它使用SQLServerExpress作为后端数据库。 当我们在某个时候部署新版本时,我们需要更改数据库:添加表、添加列、删除列、合并表、合并列等

直到今天,我们仍然使用脱机SQL脚本来修改数据库,但这种解决方案不可扩展,而且错误清除非常困难

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

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

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

  • 我们最近开始使用它,并且非常满意。这个简而言之:您包括一组具有版本的SQL脚本。Flyway引擎将拾取尚未应用的SQL脚本(创建了一个特殊的元数据表)并运行它们。您可以在版本中使用SQL,也可以使用纯Java。

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

    它可以处理大量现成的更改,还支持使用自定义迁移java类

    我自己从未使用过它,但自2007年以来它是开源的


    下面是一个简短的说明。

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

    谢谢,我们会检查它。祝您度过愉快的一天。您可以查看一些模式迁移工具的简要比较。