Flyway 在 Maven 多模块项目中找不到迁移

Posted

技术标签:

【中文标题】Flyway 在 Maven 多模块项目中找不到迁移【英文标题】:Flyway not finding migrations in Maven multi module project 【发布时间】:2021-05-04 11:38:14 【问题描述】:

我有一个 Maven 多模块 Spring Boot 项目,其中包含模块 App、Domain1 和 Domain2。应用依赖于 Domain1 和 Domain2。

Flyway 在 App 模块中自动配置,迁移在 db/migrations 中。它运行没有问题。

在域模块中,我有带有 @AutoConfigureBefore(JpaAutoConfiguration::class) 的 AutoConfiguration 类,可以“每个域”手动运行 flyway。每个域在不同的位置都有它的迁移文件(以防止冲突):

域1:

    @Autowired
    fun migrateFlyway(dataSource: DataSource) 
        val cfg = FluentConfiguration()
            .locations("classpath:migrations/domain1")
            .baselineOnMigrate(true)
            .table("flyway_domain1_history")
            .dataSource(dataSource)
        val flyway = Flyway(cfg)
        flyway.migrate()
    

域2:

    @Autowired
    fun migrateFlyway(dataSource: DataSource) 
        val cfg = FluentConfiguration()
            .locations("classpath:migrations/domain2")
            .baselineOnMigrate(true)
            .table("flyway_domain2_history")
            .dataSource(dataSource)
        val flyway = Flyway(cfg)
        flyway.migrate()
    

问题是:域中的两个 flyway 实例都运行,创建了各自的历史表。但是:它们实际上都没有执行其中的 sql 文件,尽管它们存在(从目标文件夹中的 IntelliJ 检查,并且在使用 Maven 构建整个东西之后,SQL 文件存在于 JAR 中)。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

没关系,在使用 Flyway 多年后,我只是不了解基线属性。 De 默认是 1,我的第一个脚本有版本 1。所以 Flyway 看到了,但跳过了。将基线设置为“000”解决了这个问题。

【讨论】:

以上是关于Flyway 在 Maven 多模块项目中找不到迁移的主要内容,如果未能解决你的问题,请参考以下文章

Flyway:在 [classpath:db/migration] 中找不到迁移位置

在多模块项目中找不到工件

Flyway 在 sbt 中找不到我的迁移文件

Flyway 仅在我的 jar 文件中找不到迁移

maven项目中找不到Maven Dependencies解决办法

解决项目中找不到Maven Dependencies