Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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
Java数据库迁移模式?_Java_Database_Migration_Design Patterns - Fatal编程技术网

Java数据库迁移模式?

Java数据库迁移模式?,java,database,migration,design-patterns,Java,Database,Migration,Design Patterns,我正在用Java编写一些数据库迁移代码。我也使用工厂模式,所以我可以使用不同类型的数据库。im使用的每种数据库都实现了一个通用接口 我想做的是在类内部进行迁移检查,并自动运行一些数据库模式更新代码。实际的更新非常简单(我在一个表中检查模式版本,并与我的应用程序中的一个常量进行比较,以决定是否迁移以及在模式的哪个版本之间迁移) 为了实现自动化,我认为测试应该在构造函数内部(或从构造函数调用)。好吧,很公平,很简单。我的问题是,我不希望每次实例化一个数据库对象时都运行测试(它运行一个查询,所以让它在

我正在用Java编写一些数据库迁移代码。我也使用工厂模式,所以我可以使用不同类型的数据库。im使用的每种数据库都实现了一个通用接口

我想做的是在类内部进行迁移检查,并自动运行一些数据库模式更新代码。实际的更新非常简单(我在一个表中检查模式版本,并与我的应用程序中的一个常量进行比较,以决定是否迁移以及在模式的哪个版本之间迁移)

为了实现自动化,我认为测试应该在构造函数内部(或从构造函数调用)。好吧,很公平,很简单。我的问题是,我不希望每次实例化一个数据库对象时都运行测试(它运行一个查询,所以让它在每个构造上运行是没有效率的)。所以,也许这应该是一个类静态方法?我想我的问题是,对于这类问题,什么是好的设计模式?应该有一种干净的方法来确保迁移测试只运行一次或超级高效。

看看。
这里有一篇ibm developerworks文章,它有一个很好的走查功能,请看。

这里有一篇IBMdeveloperWorks文章,它有一个很好的遍历性

我一直在使用iBATISSQLMapper,并且非常喜欢它。下一个版本iBATIS3.0已经发布。这仍然是测试版,但我计划在它接近发布候选版本时使用它。

我一直在使用iBatis SQL Mapper,非常喜欢它。下一个版本iBATIS3.0已经发布。这仍然是测试版,但我计划在它接近发布候选版本时使用它。

Flyway非常适合您的需要。它支持多个数据库,将模式版本与类路径上的可用迁移进行比较,并相应地升级数据库

您可以将其嵌入到应用程序中,并在启动时运行一次,如中所述

注意:Flyway还附带了一个Maven插件,能够在开发过程中出错时清理现有模式


[免责声明:我是Flyway的开发者之一]

Flyway完全符合您的需求。它支持多个数据库,将模式版本与类路径上的可用迁移进行比较,并相应地升级数据库

您可以将其嵌入到应用程序中,并在启动时运行一次,如中所述

注意:Flyway还附带了一个Maven插件,能够在开发过程中出错时清理现有模式


[免责声明:我是Flyway的开发者之一]

如果您有一个可以在上面运行的单片应用程序,那么LiquiBase是一个很好的工具。因为最常见的情况确实如此,所以这不是问题。如果您有一个单一的单片应用程序可以在其上运行,那么LiquiBase是一个很好的工具。因为最常见的情况是这样的,这不是问题。这看起来很有趣-我必须检查一下。这看起来很有趣-我必须检查一下。