пара моментов для рассмотрения
Каково желаемое поведение приложения, когда БД действительно недоступна, когда экземпляр java-приложения? Итак, flyway не запустится, но как приложение сможет обрабатывать запросы, которые должны поступить в базу данных?
Сам Flyway опирается на компонент DataSource, может быть, на спящий, если вы его используете, и это гораздо более сложные инфраструктуры, чем сам Flyway *
Может быть, если база данных недоступна, приложение вообще не нужно будет запускать?
Вместо этого стоит положиться на оркестраторов (таких как kubernetes, ECS или что-то еще, что распознает, что приложение не запустилось и будет пытаться перезапустить запуск снова, снова и снова, пока база данных не будет готова)?
Это моя рекомендация в целом.
Теперь, предполагая, что нашли ответы на все эти вопросы и все же, хотите продолжить этот путь:
Spring Boot сам по себе работает, когда дело доходит до интеграции flyway:
Если соответствующие классы (класс Flyway) существуют на пути к классам и spring.flyway.enabled=true
, тогда запускается bean of flyway, и весенняя загрузка делает свое волшебство.
Технически соответствующая автоматическая конфигурация находится в классе org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
(org.springframework.boot: spring-boot-autoconfigure module)
Я думаю, что для этого нужно отключить flyway, и учитывая тот факт, что бины, такие как DataSource, доступны (каким-то образом) - создайте Bean-объект Flyway самостоятельно и запустите миграцию в каком-то цикле в фоновом режиме, который будет выходить только если миграция действительно успешна (или уже применена)