如何将 Flyway H2 迁移的历史存储在 PUBLIC 之外的另一个模式中?

How to store Flyway H2 migrations' history in another schema than PUBLIC?

将 Flyway 与 H2 数据库结合使用,我开箱即用了存储在 PUBLIC.schema_version.

中的所有 SQL 架构迁移历史记录

我想将此 table 存储在专用的 SQL 架构 FLYWAY 中,如下所示:FLYWAY.history.

这样做的原因是在打开 PUBLIC table 时不会在视觉上污染 H2 控制台,并避免任何命名空间冲突。

通过修改 属性 flyway.table,可以更改历史 table 的名称。

但是使用flyway.table=FLYWAY.history 不起作用。架构 FLYWAY 未创建,而是创建了 table PUBLIC.'FLYWAY.history'

如何调整 Flyway 配置才能达到预期结果?

提供此 属性 可部分解决问题:flyway.schemas=FLYWAY,PUBLIC.

通过这样做,历史 table 将存储在架构 FLYWAY 中,但默认情况下所有迁移都将 运行 在此架构上。

请参阅 http://flywaydb.org/documentation/commandline/migrate.html 并查找架构以了解更多详细信息。

我发现这种方法有 2 个问题,可以通过小的调整来解决。

第一期:

在任何 Flyway 迁移尝试之前,架构 FLYWAY 必须存在。这可以在 java 中通过使用 stmt.execute("CREATE SCHEMA IF NOT EXISTS FLYWAY"); 完成,并在迁移前关闭数据库

第2期:

默认情况下,所有迁移都将 运行 在架构 FLYWAY 上。 这可以通过修改每个 SQL 迁移文件以专门指向 PUBLIC 架构来解决。然后每个文件将包含这些语句:create table PUBLIC.PERSON (...);

我已经解决了手头的问题,但我对修复和额外的手动工作并不完全满意。希望有人能提供更好的答案(更原生的方式)和更少的调整。