Миграция базы данных Flyway для автоматического запуска при развертывании новой войны

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

flyway автоматически запускается при развертывании сервера? Должен ли я всегда автоматизировать сценарий, который затем будет командой миграции flyway? Или как лучше всего это сделать?

сервер:

сервер-это сервер Java Tomcat, работающий на Elastic Beanstalk (AWS), который подключен к базе данных MySQL.

развертывание Процесс

мы запускаем наши сценарии миграции sql в базе данных вручную. Затем мы загружаем новую войну сервера в Elastic Beanstalk.

2 ответов


как сказано в комментариях, может быть несколько способов сделать это.

ServletContextListener

одним из распространенных способов является использование крючка определяется Java Servlet spec для уведомления, когда ваше веб-приложение запускается и выключается. Этот крюк -ServletContextListener интерфейс. Добавьте класс в свой проект, реализующий два метода в этом интерфейсе: один для запуска и один для завершения работы. В методе запуска запустите код Flyway.

слово "контекст" - это технический термин, означающий ваше веб-приложение.

  • contextInitialized
    ваше веб-приложение запускается. Входящий веб-запрос еще не обработан и не будет обработан до завершения реализации этого метода. Здесь вашему миграции перелетного.
  • contextDestroyed
    веб-приложение завершает работу. Последний оставшийся веб-запрос был обслужен, и больше не будет принят.

аннотирования этот класс @WebListener это самый простой из нескольких способов получить ваш сервлет контейнер для регистрации экземпляра.

довольно легко.

код ServletContextListener гарантированно вызывается и запускается до завершения до первого выполнения любого сервлета (или фильтра) в вашем веб-приложении. Таким образом, это идеальное место для выполнения работы по настройке, которую вы хотите закончить, прежде чем ваши сервлеты начнут работать. Flyway кажется мне естественным.

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

обработка неудача

имейте в виду, что остановка развертывания веб-приложения, когда что-то идет не так (когда ваш ServletContextListener сталкивается с исключением), не определена в спецификации сервлета.

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

мой Вопрос-Ответ и группа связанных вопросов, которые я перечисляю в этом ответе. Tomcat 8.0.33 останавливает развертывание и разворачивает веб-приложение, но, к сожалению, не сообщает об исключении (или, по крайней мере, я не смог найти такой отчет в журналах или в консоли IDE в режиме разработки). Поведение других контейнеров сервлетов может отличаться.


Это может быть полезно:

автоматическая миграция при запуске:https://flywaydb.org/documentation/api/

поэтому для Java все, что нужно, это создавать скрипты (например. V1 _ _ начальная _ схема.язык SQL. ,..), поместите их под /src / main / resources / db / migration/ а потом:

Flyway flyway = new Flyway();
flyway.setDataSource(...);
flyway.migrate();