Flyway 是否支持测试文件夹下的 sql 迁移?



我正在将一个项目从 Spring Boot 1.5.21 迁移到 2.2.5。我已按照指南中的所有说明进行操作。但是,我在飞行路线上遇到了问题(从 4.2.0 升级到 6)。

以前,当我在src/test/resources/db/migration下有 sql 迁移文件时,flyway 会将它们作为mvn clean install命令的一部分运行。现在,由于某种原因,它停止运行这些迁移(澄清一下,我说的是maven构建而不是在运行应用程序时)。

我正在使用具有以下配置的maven 3.6.3flyway-maven-plugin version 6.0.8(某些值是与此问题无关的令牌):

<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>${flyway.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>${db.skip}</skip>
<url>${db.url}</url>
<user>${db.username}</user>
<password>${db.password}</password>
<locations>
<location>classpath:db/migration</location>
</locations>
<schemas>public,downstream</schemas>
<outOfOrder>true</outOfOrder>
<callbacks>
db.migration.callback.PopulateControlFieldsFlywayCallback,db.migration.callback.UpdateReplicaIdentityFlywayCallback,db.migration.callback.UpdateSchemaHistoryTableFlywayCallback
</callbacks>
</configuration>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
</plugin>

为什么行为发生了变化?如何恢复旧行为?我错过了什么吗?

我已经挖了flywayflyway-maven-plugin巫术。我发现类路径位置标记的路径由类中的ClassRealm搜索。并且存在两个类路径:ClassRealm[plugin>org.flywaydb:flyway-maven-plugin:5.0.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83]ClassRealm是 Maven 中使用的类加载器。

我执行了classLoader.getResources('/db/migration'),发现它为 mave-plugin 版本4.2.0返回 2 条路径(target/classes/db/migrationtarget/test-classes/db/migration),但只返回 1 条路径(target/classes/db/migration) for version5.0.0'。

我还发现在 flyway-maven-plugin 存储库中有一个提交,用于在版本 3.4.2.0maven-plugin和 2 之间使用 maven 3 而不是 5.0.0

。我还没有找到确切的原因,但是,总而言之,我想 maven-plugin(我猜是一些 maven 核心库版本)发生了一些变化,因此类路径中的查找路径发生了变化。

我已经尝试了几种返回旧行为的选项,但所有这些选项都不是很好。这些是工作:

  1. 留在 4.2.0maven-plugin版本(我有一个宠物项目,其中 我在<dependencies>中指定了飞行路线 5.0.0 并使用maven-plugin4.2.0 并且它对您正常工作);
  2. 指定通过<location>filesystem:target/test-classes/db/migration</location><location>filesystem:src/test/resources/db/migration</location>进行测试迁移的路径

我希望它能帮助你。

附言顺便问一下,为什么使用 migration under test 文件夹来生成 jooq 的类?这对我来说看起来很奇怪。您可以从一个数据库模型生成类,但在 PROD 中,您将拥有另一个数据库模型(因为仅使用main下的迁移)。也许您应该考虑一下并仅在main文件夹下使用迁移?如果在 jooq generatinig 时遇到一些异常,请尝试在不test迁移的情况下修复它。

最新更新