使用带有 H2 数据库的 Flyway,我开箱即用地获取了存储在PUBLIC.schema_version.
我想这个表存储在一个专用的SQL模式迁飞,像这样:FLYWAY.history。
这样做的原因是在打开 PUBLIC 表时不会在视觉上污染 H2 控制台,并避免任何命名空间冲突。
通过修改属性flyway.table,可以更改历史表的名称。
但使用flyway.table=FLYWAY.history不起作用。不创建架构FLYWAY,而是创建了表PUBLIC.'FLYWAY.history'。
应该如何调整 Flyway 配置以达到预期的结果?
提供此属性部分解决了这个问题: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 (...);
我已经解决了我手头的问题,但我对修复和额外的手动工作并不完全满意。希望有人可以提供更好的答案(更原生的方式)和更少的调整。