Flyway не удается найти миграции внутри Jar

#java #flyway

#java #flyway

Вопрос:

Я создал приложение spring boot и упаковал его как JAR.

Когда я вызываю свой jar, у меня есть параметр для принудительного запуска application.properties, один для разработчика, другой для prod.

В dev у меня есть следующая конфигурация для 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.

Есть мысли?

Прежде чем запрашивать ошибки, сообщений нет, просто говорится, что нечего переносить, потому что он ищет неправильный путь.

Комментарии:

1. Что это filesystem ? Вы должны использовать что-то вроде classpath:/migrations в обоих случаях.

Ответ №1:

В первом случае (dev) это работает, потому что приложение выполняется в корневом каталоге проекта по умолчанию. Он принимает файлы разработки, а не встроенные файлы — что неверно, потому что это не дает гарантии, что это работает на производстве (факт, который вы на самом деле видите).

Это больше не работает в рабочей среде, потому что BOOT-INF находится внутри пакета сборки (JAR), а не в физическом файле, на который вы можете ссылаться с помощью пути к файловой системе.

Файлы в src/main/resources также упакованы как часть JAR BOOT-INF/classes . Ссылки на файлы внутри JAR должны быть через classpath. Итак, настройки должны быть в обоих случаях:

 spring.flyway.locations=classpath:/migrations
  

Комментарии:

1. @paulorodriguez Если это помогло, вы можете принять ответ.

2. извините, не знал

3. в моем случае не работает