flyway 在初始模式创建后不创建模式

Posted

技术标签:

【中文标题】flyway 在初始模式创建后不创建模式【英文标题】:flyway doesn't create schema after initial schemas creations 【发布时间】:2021-11-26 08:10:43 【问题描述】:

我正在使用 flyway-core 7.15.0 和 spring-boot 2.4.11。这是application.properties文件中的flyway配置

spring.flyway.schemas=schema1,schema2
spring.flyway.table=schema_version
spring.flyway.out-of-order=true
spring.flyway.ignore-missing-migrations=true

还有,我有这个豆子

@Autowired
private ApplicationArguments appArgs;

@Bean
public FlywayMigrationStrategy cleanMigrateStrategy() 
    return flyway -> 
        if (appArgs.containsOption("flywayClean")) 
            flyway.clean();
        
        if (appArgs.containsOption("flywayRepair")) 
            flyway.repair();
        
        flyway.migrate();
    ;

一切正常,但是当我添加一个这样的架构并重新启动新架构没有创建的应用程序时。

spring.flyway.schemas=schema1,schema2,schema3

有人知道为什么不添加第一次运行后添加的 schema3 吗?

【问题讨论】:

【参考方案1】:

在当前版本 - 7.x 和 v8 测试版中 - 创建模式的检查仅在“干净”数据库上完成 - 也就是说,尚未创建模式历史表,因此,如果您已经开始了一系列迁移并通过添加一个额外的参数来更改schemas 参数,它永远不会被创建。 (严格来说,只有当schemas 参数没有以改变历史表的隐含位置的方式发生变化时!)

我会将此作为问题提交给团队进行审核。 https://github.com/flyway/flyway/issues/3296

【讨论】:

感谢 Julia Hayward 的回复。我会关注这个问题。在代码中,我发现这部分被添加到它检查是否不存在架构然后创建但似乎它是出于另一个原因添加的。 github.com/flyway/flyway/blob/…

以上是关于flyway 在初始模式创建后不创建模式的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有快照隔离级别的 Flyway 模式历史记录?

使用 gradle 和 flyway 插件创建 MySQL 模式

使用 Flyway 部署到多个模式

Flyway:如何支持清理具有相同生命周期的多个模式?

在不使用 hibernate.hbm2ddl.auto 的情况下,如何将所有初始模式导出到 Flyway?

AngularJS 组件模式在 Promise 后不更新