2016-05-11 11 views
4

Ich möchte, dass Flyway ausgeführt wird, wenn ich einen neuen Krieg auf meinem Server ausnutze.Migration von Flyway-Datenbanken wird automatisch ausgeführt, wenn ein neuer Krieg ausgeführt wird

Wird flyway automatisch ausgeführt, wenn ein Server bereitgestellt wird? Muss ich immer ein Skript automatisieren, das dann den Migrationsbefehl für die Flugroute enthält? Oder was ist der beste Weg, dies zu tun?

Server:

Der Server ist ein Java Tomcat Server auf Elastic Beanstalk (AWS), die mit einer MySQL-Datenbank verbunden ist.

Bereitstellungsprozess

Wir führen manuell unser SQL-Migrationsskripts in der Datenbank. Dann laden wir einen neuen Krieg des Servers auf Elastic Beanstalk hoch.

+2

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

+1

Es gibt mehrere Optionen für die Migration von Flyway-Migrationen. Wenn Sie Ihr Anwendungsdesign ausarbeiten, können wir eine bessere Antwort geben. – Thomas

+0

@Thomas nur ein bisschen mehr Informationen hinzugefügt, lassen Sie mich wissen, wenn ich noch etwas hinzufügen kann, das nützlich wäre –

Antwort

1

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.

0

Dies kann nützlich sein:

Auto-Migration beim Start: https://flywaydb.org/documentation/api/

Also für Java alles was man braucht ist Skripte zu erstellen (. ZB V1__initial_schema.sql, ...), legte sie unter/src/main/resources/db/Migration/ und dann:

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