Flyway, весенняя загрузка и запуск приложения без базы данных - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь сделать приложение Spring Boot с Flyway (и пулом Hikari) для запуска сервера, даже если БД в это время недоступна.

Мне нужно поддерживать случаи, когда: 1. БДнедоступно при запуске приложения (после запуска DB он должен запускаться Flyway, это может продолжаться до 30 минут).2. БД переходит в автономный режим в течение срока службы приложения, а затем возвращается в исходное состояние.

В первом случае у меня возникла проблема. Flyway всегда пытается выполнить миграцию, даже если БД недоступна и приложение останавливается.Я попытался добавить spring.datasource.continue-on-error: true, но Flyway игнорирует это, и я не смог найти конфигурацию пролета, которая позволила бы такую ​​операцию.

Возможно ли это, или я должен обернуть Flyway и сделать это сам?

Spring boot 2.1.4

1 Ответ

0 голосов
/ 21 июня 2019

пара моментов для рассмотрения Каково желаемое поведение приложения, когда БД действительно недоступна, когда экземпляр 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 самостоятельно и запустите миграцию в каком-то цикле в фоновом режиме, который будет выходить только если миграция действительно успешна (или уже применена)

...