Flyway 找不到类路径:db/migrations

Flyway can't find classpath:db/migrations

我刚刚在 Intellij 中开始一个新项目,使用 Spring Boot ver 2.1.3 和 Flyway 5.2.4 with Java 11.

尝试启动我的项目后,我得到了:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.core.Flyway]: Factory method 'flyway' threw exception; nested exception is java.lang.IllegalStateException: Cannot find migrations location in: [classpath:db/migration] (please add migrations or check your Flyway configuration)

我有以下文件夹:

如您所见,我有 "db/migration" 但没有任何迁移,我现在才开始。调试 class FlywayAutoConfiguration 我得到以下信息:

所以,我尝试 return "classpath:" 中的所有文件,请参阅:

请注意,我只有 "application.properties" 文件。

我相信Flyway至少需要一个迁移脚本来初始化。尝试将一个简单的 sql 创建脚本添加到您的迁移文件夹中,然后再试一次。或者,您可以在需要时禁用 flyway 依赖项。

我有类似的错误,解决方法如下:我添加了这些命令

spring.flyway.baselineOnMigrate=true
spring.flyway.check-location=true
spring.flyway.locations=classpath:db/migration
spring.flyway.schemas=public
spring.flyway.enabled=true

到application.properties

这不是很有用或准确的答案。

但是这个问题让你很沮丧,所以我给出了这个解决方案。

注意:奇怪,但确实如此,有时它不允许复制粘贴,因为您的文件夹创建了 db.migration 并且它确切的 db->migration(这与此不同设想)。所以每当你从头开始。转到资源文件夹 -> 创建数据库文件夹 -> 创建迁移文件夹 -> 使用 Version_SubVersion__Name(定义如下)创建数据库文件。

通常在以下情况下会发生这种情况,

  1. 路径不正确尝试使用设置位置参数值。
  2. db.migrate文件夹不包含任何文件。
  3. 检查文件名:V1_1__(short_desc)
  4. 尝试运行使用,mvn compile flyway:migrate

在我的例子中,我已经将 sql 文件放在那里,但它仍然给出同样的错误, 基本上我使用从某处复制粘贴来放置这个 sql 文件。

当我尝试使用 IDE 在同一位置添加一个新文件时(Intellij:右键单击迁移文件夹 -> 新建 -> Flyway 迁移 -> 版本化迁移),然后它会询问我(警告)关于一些微妙的津贴(通常我们在数据库配置中提到我也仍然放在那里),它开始工作。

即使您的迁移文件位于 db/migration 文件夹中,flyway 也不会检测到它。

然后您将必须通过在 application.properties(或 appliocation.yml)中明确设置位置来解决此问题,方法是添加:

spring.flyway.locations=classpath:db/migration

N.B: 另外你至少要有一个初始化flyway的脚本,你甚至可以放一个空的。但是你至少需要有一个脚本

Flyway 需要至少一个脚本,禁用它 直到你需要它,使用application.properties 文件中的以下命令

spring.flyway.enabled=false

正如@Guy 在他的回答中建议的那样,我在迁移文件夹中创建了一个 SQL 文件并将其留空。在迁移文件夹 classpath:db/migration 中命名为 v1_0__mock_flyway.sql。错误已解决。

我遇到了同样的问题。当我创建目录时,我只是输入 db.migration - 就像输入包名称一样。 InteliJ 会将 db.migrationdb/migration 目录显示为 db.migration,因此虽然它在 IntelliJ 中看起来正确,但 flyway 需要后者。