我正在研究Java中的一些数据库迁移代码。我也使用工厂模式,所以我可以使用不同种类的数据库。并且我使用的每种数据库都实现了一个通用接口。
我想要做的是进行类内部的迁移检查,并自动运行一些数据库架构更新代码。实际更新非常简单(我检查表中的模式版本,并与我的应用程序中的常量进行比较,以决定是否要迁移以及在哪个版本的模式之间)。
为了使这个自动化我认为测试应该在构造函数内部(或从中调用)。好吧,公平,这很简单。我的问题是我不希望每次运行测试时都会实例化一个数据库对象(它运行一个查询,因此让它在每个构造上运行都不高效)。那么也许这应该是一个类静态方法?我想我的问题是,这类问题的优秀设计模式是什么?应该有一种干净的方法来确保迁移测试只运行一次或超高效。
答案 0 :(得分:3)
查看liquibase 这是一篇ibm developerworks文章,它有一个很好的漫游http://www.ibm.com/developerworks/java/library/j-ap08058/index.html
答案 1 :(得分:2)
Flyway完美契合您的需求。它支持多个数据库,将模式版本与类路径上的可用迁移进行比较,并相应地升级数据库。
您可以将其嵌入到您的应用中,并按照Flyway docs中的说明在启动时运行一次。
注意:Flyway还附带了一个Maven插件,并且能够清理现有架构,以防您在开发过程中搞砸了。
[免责声明:我是Flyway的开发人员之一]
答案 2 :(得分:0)
我一直在使用iBatis SQL Mapper和真的。下一个版本iBatis 3.0有schema migrations support。这仍处于测试阶段,但我计划在接近发布候选版本时使用它。