Flyway 无法在 Jar 中找到迁移
Flyway cannot find migrations inside Jar
我制作了一个 spring 引导应用程序并将其打包为 JAR。
当我调用我的 jar 时,我有一个参数来强制 application.properties,一个用于开发,另一个用于生产。
在开发中,我有以下 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
但是在产品上我找不到迁移。
请注意,我只是将位置从 src/main/java/resources 更改为 boot-inf...因为 jar 是这样构成的。
有什么想法吗?
在询问错误之前,没有消息,它只是说没有要迁移的东西,因为它正在寻找错误的路径。
在第一种情况下 (dev) 它可以工作,因为应用程序默认在根项目目录中执行。它采用开发文件,而不是构建文件 - 这是不正确的,因为它不能保证它在生产中工作(你实际看到的事实)。
这不再适用于生产环境,因为 BOOT-INF
在构建包 (JAR) 中,而不是您可以通过文件系统路径引用的物理文件。
src/main/resources
中的文件与 BOOT-INF/classes
一样打包为 JAR 的一部分。 JAR 中的文件必须通过类路径引用。所以,这两种情况下的设置应该是:
spring.flyway.locations=classpath:/migrations
我制作了一个 spring 引导应用程序并将其打包为 JAR。
当我调用我的 jar 时,我有一个参数来强制 application.properties,一个用于开发,另一个用于生产。
在开发中,我有以下 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
但是在产品上我找不到迁移。
请注意,我只是将位置从 src/main/java/resources 更改为 boot-inf...因为 jar 是这样构成的。
有什么想法吗?
在询问错误之前,没有消息,它只是说没有要迁移的东西,因为它正在寻找错误的路径。
在第一种情况下 (dev) 它可以工作,因为应用程序默认在根项目目录中执行。它采用开发文件,而不是构建文件 - 这是不正确的,因为它不能保证它在生产中工作(你实际看到的事实)。
这不再适用于生产环境,因为 BOOT-INF
在构建包 (JAR) 中,而不是您可以通过文件系统路径引用的物理文件。
src/main/resources
中的文件与 BOOT-INF/classes
一样打包为 JAR 的一部分。 JAR 中的文件必须通过类路径引用。所以,这两种情况下的设置应该是:
spring.flyway.locations=classpath:/migrations