当前位置: 首页 > 知识库问答 >
问题:

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

燕靖
2023-03-14

我正在将一个项目从Spring Boot 1.5.21迁移到2.2.5。我遵循了指南中的所有说明。但是,我对flyway有一个问题(从4.2.0升级到6)。

以前,当我在src/测试/资源/数据库/迁移下有sql迁移文件时,flyway会将它们作为mvn全新安装命令的一部分运行。现在,由于某种原因,它停止运行这些迁移(只是为了澄清,我说的是maven build,而不是在运行应用程序时)。

我使用以下配置使用maven 3.6.3flyway-maven插件版本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>

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

共有1个答案

高宸
2023-03-14

我已经挖掘了<code>flyway</code>和<code>flyway maven插件</code>资源。我发现classpath位置标记的路径由class中的<code>ClassRealm</code>搜索。并且存在两个类路径:<code>ClassRealm〔plugin

我已经执行了< code > class loader . get resources('/db/migration '),发现对于mave-plugin版本< code>4.2.0,它返回2个路径(< code > target/classes/db/migration 和< code > target/test-classes/db/migration ),但是对于版本5.0.0 `,它只返回1个路径(< code > target/classes/db/migration `)。

另外,我发现在飞行方式专家插件存储库中有一个提交,用于在maven插件版本4.2.0和5.0.0之间使用maven 3而不是2。

我还没有找到确切的原因,但总结一下,我猜maven插件(我猜是maven核心库版本)中有一些更改,导致classpath中的查找路径发生了更改。

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

  1. 保持4.2.0maven-plugin版本(我有一个宠物项目,我在中指定了flyway 5.0.0

希望对你有帮助。

附言:顺便问一下,为什么你使用测试文件夹下的迁移来通过jooq生成类?这对我来说看起来很奇怪。你从一个数据库模型生成类,但是在PROD中你会有另一个数据库模型(因为只使用main下的迁移)。也许你应该考虑一下,只使用main文件夹下的迁移?如果你在jooq生成时有一些异常,试着在没有test迁移的情况下修复它。

 类似资料:
  • 问题内容: 我有需要在各种不同的登台环境中运行的JUnit测试。每个环境都有不同的登录凭据或该环境特定的其他方面。我的计划是将环境变量传递到VM中以指示要使用的环境。然后使用该var从属性文件中读取。 JUnit是否有任何内置功能来读取.properties文件? 问题答案: Java内置了读取.properties文件的功能,而JUnit内置了在执行测试套件之前运行安装代码的功能。 java阅读

  • 我正在使用Java和SQL迁移,使用Flyway,使用JavaAPI。我没有更改迁移文件夹的默认位置,也就是说,我使用“数据库/迁移”。 但是,为了清楚起见,我想将SQL和Java迁移放在同一个文件夹中(Flyway从src/main/java/db/迁移文件夹读取Java迁移,从src/main/Resources/db/迁移读取SQL迁移)。我尝试将SQL脚本复制到java文件夹,但flywa

  • 问题内容: 为挥杆动作设置图像: 文件不会渲染,只有png / jpg。 这是设计使然吗? 问题答案: 尽管通常可以依靠PNG,JPG和GIF,但受支持的类型可能会因制造商和版本而异。 在这里/现在输出

  • 问题内容: Android中是否可以将Google地球中的KML文件加载到地图小部件中? 具体来说,我希望尽可能轻松地将在Google Earth中创建的保存形状加载到地图小部件上方。有人尝试过吗? 问题答案: 这是一个古老的问题,但是如果有人碰巧发现了这个问题,那么这个答案可能会有所帮助。 您是否要以编程方式将kml文件添加到应用程序内的mapfragment上?如果是这样,您可以使用此方法。

  • 问题内容: 目前,我正在查看Selenium Server,但似乎没有注意到支持无头浏览器测试的驱动程序。 除非我弄错了,否则它不支持。如果您使用的是X,则可以创建一个虚拟的帧缓冲区来隐藏浏览器窗口,但这并不是真正的无头浏览器。 谁能启发我?Selenium是否支持无头浏览器测试? 问题答案: 您无需使用PhantomJS替代Selenium。Selenium包括一个在GhostDriver平台上

  • 我对测试有点陌生(吓人,嗯),所以如果这是无知的话,请原谅我。 根据对测试框架所做的更改,spock spring 0.7-groovy-2.0是否与新的spring 3.2版本兼容? 我已经查看了正在测试的Spring 3.2文档: 以及新闻下的斯波克文档: 但是,没有任何东西可以帮助我判断新的Spring3.2测试框架是否仍然允许以Spring3.2测试(Spring3.2文档第11.3.4节