Как отлаживать, когда Flyway не работает на Spring Boot?

я использую Maven и Spring Boot. Я запускаю приложение с помощью mvn spring-boot:run.

https://flywaydb.org/documentation/plugins/springboot говорит пролете должен называться по весне начала загрузки.

Итак, мой пом.xml содержит зависимость от Flyway.

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>4.1.2</version>
</dependency>

в первый раз, когда я запустил команду Maven выше, она загрузила материал Flyway, поэтому я думаю, что зависимость работает.

у меня есть следующие файлы:

./src/main/resources/db/migration/V123__foo.sql
./src/main/resources/application.properties

в приведенной выше статье подразумевалось, что он должен "просто работать", но я не понимаю, где он найдет URL-адрес JDBC для базы данных. Поэтому я добавил следующее к :

flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true

когда Spring Boot запускается (и загружает и делает доступным мое веб-приложение), нет журналов с Flyway. Я думаю, что Flyway игнорируется.

что я могу сделать? Или, в более общем плане,как я сам буду отлаживать эту проблему?

1 ответов


никто не опубликовал ответ, поэтому я опубликую то, что узнал.

М. Deinum был действительно корректен в своих комментариях к вопросу, проблема отсутствия источников данных.

мой первоначальный вопрос заключался в том, каким должен быть подход к отладке такого рода проблем. Очевидно, один из вариантов-опубликовать в stackoverflow:) но я хотел знать, как это сделать сам.

Spring Boot имеет ряд классов, которые смотрят на ваш код и путь к классам и действуют соответственно. Например, существуют классы, предоставляющие реализации правилам типа "Если Flyway находится на пути, и есть источник данных, то выполните Flyway". Это правило не срабатывало в моем случае, потому что у меня не было источника данных.

это не тот случай, когда код, который вы пишете, вызывает Spring Boot, наоборот, Spring Boot (внешний по отношению к вашему коду) проверяет ваш код и решает, что делать на основе правил. Эта архитектура известна как действие на a расстояние. Основная проблема с действием на расстоянии-это очень трудно отлаживать.

единственный реальный способ найти решение, и это был способ, которым я подтвердил диагностику M. Deinum, - прочитать исходный код Spring Boot и понять аннотации, которые используются для создания кода Spring Boot.

из исходного кода интеграция Flyway Spring Boot мы видим

@ConditionalOnClass(Flyway.class)
@ConditionalOnBean(DataSource.class)

Это означает, что "этот код будет выполняться если Flyway находится на пути к классам, и если есть доступный компонент источника данных; в противном случае он молча не будет выполнен".

таким образом, ответ на вопрос "как отладить эту проблему" заключается в том, что нет другого механизма, кроме как прочитать исходный код Spring Boot и узнать, как он работает.

Если вы хотите избежать такого рода проблем, вы должны избегать фреймворков, которые работают через "действие на расстоянии", и это включает в себя Spring Boot.