我刚刚在 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”文件。
这不是那么有用或准确的答案。
但是这个问题让你感到沮丧,所以我给出了这个解决方案。
注意: 很奇怪,但确实如此,有时不允许复制粘贴,因为您的文件夹创建了 db.migration 并且它明确了 db->migration(在这种情况下不一样)。所以每当你从头开始。转到资源文件夹 -> 创建数据库文件夹 -> 创建迁移文件夹 -> 使用 Version_SubVersion__Name 创建数据库文件(定义如下)。
通常这会发生在以下情况,
就我而言,我已经将 sql 文件放在那里,但仍然给出相同的错误, 基本上我使用从某处复制粘贴来放置此 sql 文件。
当我尝试使用 IDE 在同一位置添加一个新文件时(Intellij:右键单击迁移文件夹 -> 新 -> Flyway 迁移 -> 版本化迁移),然后它会询问我(警告)一些微妙的津贴(通常我们提到在数据库配置中我也仍然放在那里),它开始工作。
Flyway 至少需要一个脚本,禁用它直到您需要它,方法是在 application.properties 文件中使用以下命令
spring.flyway.enabled=false
我相信Flyway至少需要一个迁移脚本来初始化。尝试将一个简单的 SQL 创建脚本添加到迁移文件夹中,然后再试一次。或者,您可以禁用 Flyway 依赖项,直到需要为止。
我也有同样的问题。当我创建目录时,我只需输入
db.migration
- 就像处理包名称一样。 InteliJ 会将 db.migration
和 db/migration
目录显示为 db.migration
,因此虽然在 IntelliJ 中看起来可能是正确的,但 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
如果您已尝试上述所有操作,但仍然不应用迁移。
确保您已按照之前答案中的步骤进行操作
spring.flyway.locations=类路径:db/migration
进行干净的构建 -> mvn 干净
然后重新启动您的 Spring Boot 应用程序,这对我有用。
如果您使用 cli,则可以输入
flyway clean
您可能需要根据需要添加内联配置参数。
即使您的迁移文件位于 db/migration 文件夹中,flyway 也不会检测到它。
然后,您必须通过添加以下内容来显式设置 application.properties(或 appliocation.yml)中的位置来解决此问题:
spring.flyway.locations=classpath:db/migration
注意:您还需要至少一个脚本来初始化 Flyway,您甚至可以放置一个空脚本。但你至少需要有一个脚本
正如 @Guy 在他的回答中所建议的,我在迁移文件夹中创建了一个 SQL 文件并将其留空。在迁移文件夹
v1_0__mock_flyway.sql
中命名为 classpath:db/migration
。错误已解决。