Flyway 找不到类路径:db/migrations

问题描述 投票:0回答:8

我刚刚在 Intellij 中启动了一个新项目,使用 Spring Boot 2.1.3 版和 Flyway 5.2.4 以及 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”,但没有任何迁移,我现在才开始。调试 FlywayAutoConfiguration 类我得到以下信息:

所以,我尝试返回“classpath:”中的所有文件,请参阅:

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

java flyway java-11
8个回答
20
投票

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

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

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

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

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

就我而言,我已经将 sql 文件放在那里,但仍然给出相同的错误, 基本上我使用从某处复制粘贴来放置此 sql 文件。

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


12
投票

Flyway 至少需要一个脚本,禁用它直到您需要它,方法是在 application.properties 文件中使用以下命令

spring.flyway.enabled=false


9
投票

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


3
投票

我也有同样的问题。当我创建目录时,我只需输入

db.migration
- 就像处理包名称一样。 InteliJ 会将
db.migration
db/migration
目录显示为
db.migration
,因此虽然在 IntelliJ 中看起来可能是正确的,但 Flyway 需要后者。


2
投票

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

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


2
投票

如果您已尝试上述所有操作,但仍然不应用迁移。

确保您已按照之前答案中的步骤进行操作

  • 您的资源文件夹中存在 db.migration 文件夹
  • sql 脚本按照正确的命名约定命名,例如 V1__init.sql
  • 您的 application.properties/application.yml 中存在以下配置

    spring.flyway.locations=类路径:db/migration

进行干净的构建 -> mvn 干净

然后重新启动您的 Spring Boot 应用程序,这对我有用。

如果您使用 cli,则可以输入

flyway clean

您可能需要根据需要添加内联配置参数。


1
投票

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

然后,您必须通过添加以下内容来显式设置 application.properties(或 appliocation.yml)中的位置来解决此问题:

spring.flyway.locations=classpath:db/migration

注意:您还需要至少一个脚本来初始化 Flyway,您甚至可以放置一个空脚本。但你至少需要有一个脚本


1
投票

正如 @Guy 在他的回答中所建议的,我在迁移文件夹中创建了一个 SQL 文件并将其留空。在迁移文件夹

v1_0__mock_flyway.sql
中命名为
classpath:db/migration
。错误已解决。

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