Flyway 找不到类路径:db/migrations
Posted
技术标签:
【中文标题】Flyway 找不到类路径:db/migrations【英文标题】:Flyway can't find classpath:db/migrations 【发布时间】:2019-08-15 03:56:15 【问题描述】:我现在刚刚在 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 我得到以下信息:
所以,我尝试返回“类路径:”中的所有文件,请参阅:
请注意,我只有“application.properties”文件。
【问题讨论】:
你能帮忙看看这里的类似问题吗:***.com/questions/55772574/… 【参考方案1】:这不是那么有用或准确的答案。
但是这个问题让你很沮丧,所以我给出了这个解决方案。
注意:很奇怪,但确实如此,有时它不允许复制粘贴,因为您的文件夹创建了 db.migration 并且它包含 db->migration(在这种情况下不一样)。所以每当你从头开始。转到资源文件夹 -> 创建 DB 文件夹 -> 创建迁移文件夹 -> 使用 Version_SubVersion__Name(如下定义)创建数据库文件。
这通常发生在以下情况,
-
路径不正确尝试使用设置位置参数值。
db.migrate 文件夹不包含任何文件。
检查文件名:V1_1__(short_desc)
尝试运行使用,mvn compile flyway:migrate
在我的情况下,我已经将 sql 文件放在那里,但它仍然给出同样的错误, 基本上我使用从某处复制粘贴来放置这个 sql 文件。
当我尝试使用 IDE 在同一位置添加一个新文件时(Intellij:右键单击迁移文件夹 -> 新建 -> Flyway 迁移 -> 版本化迁移),然后它会询问我(警告)一些微妙的津贴(通常我们在数据库配置中提到过,我也放在那里),它开始工作了。
【讨论】:
谢谢,文件夹结构对我来说是个问题。 ?? 我有一个名为db.migrations
的文件夹,而不是两个嵌套文件夹 db
和内部 migrations
!一个简单的mv db.migrations db; mkdir db/migrations
就成功了。在 IntelliJ 内部,之前和之后看起来是一样的!
我很想说“谢谢,这解决了我以前从未遇到过的问题”,但遗憾的是,这是我第二次遇到这个问题,你猜我会遇到的现在学会了。谢谢 IntelliJ 今天让这项工作大放异彩...谢谢,这解决了我的问题:-D【参考方案2】:
我相信 Flyway 至少需要一个迁移脚本来初始化。尝试将一个简单的 sql 创建脚本添加到您的迁移文件夹中,然后再试一次。或者,您可以在需要之前禁用 flyway 依赖项。
【讨论】:
谢谢。如何禁用它?我尝试添加 application.yml flyway: baseline-on-migrate: false 但它仍在尝试加载 尝试删除flyway依赖(例如删除maven pom依赖) 依赖来自skipper依赖。如果我排除它给出另一个错误 - ava.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.skipper.server.db.migration.SkipperFlywayConfigurationCustomizer ] 来自 ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2] 这很好。在 application.yml 中添加了 spring: flyway: enabled: false baseline-on-migrate: false【参考方案3】:Flyway 需要至少一个脚本,禁用它直到你需要它,在 application.properties 文件中使用以下命令
spring.flyway.enabled=false
【讨论】:
【参考方案4】:我遇到了类似的错误,解决方法如下:我添加了这些命令
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
【讨论】:
【参考方案5】:即使您的迁移文件位于 db/migration 文件夹中,flyway 也不会检测到它。
然后您必须通过在 application.properties(或 appliocation.yml)中明确设置位置来解决此问题,方法是添加:
spring.flyway.locations=classpath:db/migration
N.B: 另外你需要至少一个脚本来初始化flyway,你甚至可以放一个空的。但是你需要至少有一个脚本
【讨论】:
【参考方案6】:正如@Guy 在他的回答中所建议的,我在迁移文件夹中创建了一个 SQL 文件并将其留空。在迁移文件夹 classpath:db/migration
中命名为 v1_0__mock_flyway.sql
。错误已解决。
【讨论】:
【参考方案7】:我有同样的问题。当我创建目录时,我只是输入了db.migration
——就像处理包名一样。 InteliJ 会将db.migration
和db/migration
目录显示为db.migration
,因此虽然它在IntelliJ 中看起来正确,但flyway 需要后者。
【讨论】:
以上是关于Flyway 找不到类路径:db/migrations的主要内容,如果未能解决你的问题,请参考以下文章
在 websphere 上的 flyway 迁移上找不到位置
Flyway:在 [classpath:db/migration] 中找不到迁移位置