【问题标题】:Flyway cannot find migrations inside JarFlyway 在 Jar 中找不到迁移
【发布时间】:2019-03-19 18:24:04
【问题描述】:

我制作了一个 Spring Boot 应用程序并将其打包为 JAR。

当我调用我的 jar 时,我有一个参数来强制 application.properties,一个用于 dev,另一个用于 prod。

在开发中,我对 flyway 有以下配置:

spring.flyway.check-location=false
spring.flyway.locations=filesystem:./src/main/resources/migrations

在 Prod 我有以下内容:

spring.flyway.check-location=false
spring.flyway.locations=filesystem:./BOOT-INF/classes/migrations

但是在 prod 上我找不到迁移。

请注意,我只是将位置从 src/main/java/resources 更改为 boot-inf...因为 jar 的构成方式。

有什么想法吗?

在询问错误之前,没有任何消息,它只是说没有什么要迁移的,因为它正在寻找错误的路径。

【问题讨论】:

  • 这是什么filesystem?在这两种情况下,您都应该使用 classpath:/migrations 之类的东西。

标签: java flyway


【解决方案1】:

在第一种情况下(开发)它可以工作,因为应用程序默认在根项目目录中执行。它需要开发文件,而不是构建文件 - 这是不正确的,因为它不能保证它在生产中工作(您实际看到的事实)。

这不再适用于生产环境,因为BOOT-INF 位于构建包 (JAR) 中,而不是您可以通过文件系统路径引用的物理文件。

src/main/resources 中的文件与BOOT-INF/classes 一样作为 JAR 的一部分打包。 JAR 中的文件必须通过类路径引用。所以,两种情况下都应该设置:

spring.flyway.locations=classpath:/migrations

【讨论】:

  • @paulorodriguez 如果有帮助,您可以接受答案。
  • 抱歉不知道
  • 在我的情况下不起作用
猜你喜欢
  • 2012-06-28
  • 2019-09-10
  • 1970-01-01
  • 2019-05-02
  • 2013-04-07
  • 2018-08-28
  • 2020-04-29
  • 2018-12-28
  • 2021-05-04
相关资源
最近更新 更多