在显然成功迁移后未找到表

时间:2014-01-09 12:10:15

标签: h2 flyway

我正在使用flyway通过CL迁移我的生产数据库(mySql),而我使用固定的SQL查询在我的单元测试中使用H2创建数据库,表等。我现在想在每次单元测试后更好地集成flyway并创建/删除DB。

我有一个DB工厂,在其构建方法中我使用以下代码:

flyway.setLocations("filesystem:sql/migrations/common","filesystem:sql/migrations/h2");
flyway.setSchemas("MYSERVER");
flyway.setDataSource(
p.getProperty(DB_URL.getName()), 
p.getProperty(USERNAME.getName()), 
p.getProperty(PASSWORD.getName()));
flyway.setInitOnMigrate(true);
flyway.migrate();

迁移似乎正确应用,因为我可以从flyway日志中看到我的SQL代码。但是当我开始使用数据库之后,我立即得到了TABLE NOT FOUND错误。我在内存数据库中使用h2,并使用以下URL初始化我的客户端:

jdbc:h2:mem:MYSERVER;MVCC=true

你对我的错误有什么看法吗?

2 个答案:

答案 0 :(得分:2)

遇到同样的问题 - 在挖掘之后,看起来H2数据库正在以某种方式在迁移脚本之间重新创建。

您可以通过在前两次迁移中添加;DB_CLOSE_DELAY=-1来确认这种情况 - 它将在第一次迁移中成功,在第二次迁移中失败。

根据H2 Documentation,指定数据库名称和3.1选项应该足以允许对内存数据库的并发和后续访问,然而事实并非如此

将Flyway从3.2.1升级到{{1}}有修复问题。

答案 1 :(得分:1)

问题是你的JDBC网址。

MYSERVER是数据库的名称,而不是架构。

最简单的方法是让flyway使用相同的url,而不是设置架构。这样,您就可以在MYSERVER数据库的公共模式中找到所有内容。