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] 中找不到迁移位置