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(定义如下)创建数据库文件。
通常在以下情况下会发生这种情况,
- 路径不正确尝试使用设置位置参数值。
- db.migrate文件夹不包含任何文件。
- 检查文件名:V1_1__(short_desc)
- 尝试运行使用,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.migration
和 db/migration
目录显示为 db.migration
,因此虽然它在 IntelliJ 中看起来正确,但 flyway 需要后者。
我刚刚在 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(定义如下)创建数据库文件。
通常在以下情况下会发生这种情况,
- 路径不正确尝试使用设置位置参数值。
- db.migrate文件夹不包含任何文件。
- 检查文件名:V1_1__(short_desc)
- 尝试运行使用,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.migration
和 db/migration
目录显示为 db.migration
,因此虽然它在 IntelliJ 中看起来正确,但 flyway 需要后者。