Wie die Kommentare sagten, gibt es möglicherweise mehrere Möglichkeiten, dies zu tun.
ServletContextListener
Eine gängige Methode ist es, den Haken durch die Java Servlet spec definiert zu verwenden, um benachrichtigt zu werden, wenn Sie Ihren Web-App startet und herunter-down. Dieser Haken ist die ServletContextListener
Schnittstelle. Fügen Sie Ihrem Projekt eine Klasse hinzu, die die beiden Methoden in dieser Schnittstelle implementiert, eine für den Start und eine für das Herunterfahren. Führen Sie in der Startmethode Ihren Flyway-Code aus. Die Annotation dieser Klasse mit @WebListener
ist eine von mehreren Möglichkeiten, um Ihre Servlet container eine Instanz registrieren zu lassen.
Ziemlich einfach.
Ihr ServletContextListener
wird garantiert aufgerufen und vor der ersten Ausführung eines Servlets (oder Filters) in Ihrer Web-App ausgeführt. Dies ist also der perfekte Ort für Setup-Arbeiten, die Sie fertigstellen möchten, bevor Ihre Servlets funktionieren. Flyway scheint mir natürlich zu passen.
Suchen Sie den Stack-Überlauf für "ServletContextListener", um mehr zu erfahren und Beispiele zu sehen, z. B. my own Question & Answer.
Side-Problem: Beachten Sie, dass das Stoppen der Bereitstellung einer Web-App, wenn etwas schief geht (wenn Ihr ServletContextListener auf eine Exception stößt), in der Servlet-Spezifikation nicht korrekt definiert ist. Sehen Sie meine eigene Question and Answer und die Gruppe von verwandten Fragen, die ich in dieser Antwort auflisten. Tomcat 8.0.33 hält die Bereitstellung an und stellt die Webanwendung nicht bereit, meldet aber leider nicht die problematische Ausnahme (zumindest konnte ich einen solchen Bericht weder im Protokoll noch in der IDE-Konsole im Entwicklungsmodus finden). Das Verhalten anderer Servlet-Container kann variieren.
Nein, Sie haben zum Auftakt Flyway selbst. Dies kann durch ein Befehlszeilenskript als Teil der Bereitstellung oder automatisch als Teil des Startvorgangs Ihrer Webanwendung erfolgen. – Thilo
Es gibt mehrere Optionen für die Migration von Flyway-Migrationen. Wenn Sie Ihr Anwendungsdesign ausarbeiten, können wir eine bessere Antwort geben. – Thomas
@Thomas nur ein bisschen mehr Informationen hinzugefügt, lassen Sie mich wissen, wenn ich noch etwas hinzufügen kann, das nützlich wäre –