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

Chr*_*HON 5 java h2 flyway

使用带有 H2 数据库的 Flyway,我开箱即用地获取了存储在PUBLIC.schema_version.

我想这个表存储在一个专用的SQL模式迁飞,像这样:FLYWAY.history

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

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

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

应该如何调整 Flyway 配置以达到预期的结果?

Chr*_*HON 5

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

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

请参阅http://flywaydb.org/documentation/commandline/migrate.html并查找模式以获取更多详细信息。

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

第一期:

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

第二期:

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

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