flyway是否支持在测试文件夹下进行sql迁移?

问题描述 投票:4回答:1

我正在将一个项目从Spring Boot 1.5.21迁移到2.2.5。我已按照guide中的所有说明进行操作。但是,我的飞行通道有问题(从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>

为什么行为改变了?如何恢复旧的行为?我想念什么吗?

spring-boot maven-3 flyway spring-boot-maven-plugin
1个回答
1
投票

我已经挖掘了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版本target/classes/db/migration返回2条路径(target/test-classes/db/migration4.2.0,但仅返回1条路径(target/classes/db/migration) for version 5.0.0`。

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

我还没有找到确切的原因,但是总的来说,我猜想maven-plugin(我猜是一些maven核心库版本)发生了一些变化,结果是classpath中的查找路径发生了变化。] >

我已经尝试了几种方法来恢复旧的行为,但是所有这些都不是很好。这些是工作:

  1. 保持4.2.0 maven-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>指定测试迁移的路径
  3. 我希望它将对您有帮助。

P.S。顺便说一句,为什么要在jooq下使用test文件夹下的迁移来生成类?对我来说看起来很奇怪。您可以从一种数据库模型生成类,但是在PROD中,您将拥有另一种数据库模型(因为仅使用main下的迁移)。也许您应该考虑一下,仅使用main文件夹下的迁移?如果在jooq生成时有一些例外,请尝试在不进行test迁移的情况下进行修复。

© www.soinside.com 2019 - 2024. All rights reserved.