2016-08-04 45 views
0

Hauptfrage - das mag wie eine grundlegende Frage zu den Flugrouten erscheinen und ich könnte dies (irgendwie) während meiner Forschung verpasst haben, aber - ist es möglich auf Anwendungen zuzugreifen Dienste (Feder konfiguriert) bei dem Versuch, Daten mit Hilfe von Flyway zu migrieren? Nur wenige Details unten -Flyway DB migration - Wie man auf Anwendungsdienste zugreift (Spring configured)

Zusätzliche Details -

  • Ich weiß, dass wir nicht Frühling Datendienste usw. injizieren (learnt from this SO question). Und ich verstehe das von einem Datenzugriffspunkt der Ansicht.
  • Aber können wir verwenden nicht (durch Injektion) alle anderen Anwendungsdienste entweder während der Verwendung Zugweg (I für Beispiele gesucht - aber ohne Glück, und ohne auf flyway Dokumentation gemachten Angaben entweder)
  • uns sagen lassen wir nicht verwenden können, Irgendwelche Spring-Dienste (und ich finde einen Weg zu umgehen, dass), können wir zugreifen, die Eigenschaften in application.properties/.yml deklariert (dies scheint auch nicht möglich).

Putting die oben in Zusammenhang mit unserer Forderung - wir ein paar neue Felder zu wenige Tabellen hinzugefügt haben und im Rahmen der Veröffentlichung wir diese Spalten mit Daten füllen wollen. Dies erfordert, dass wir (oder die Flugreise) den folgenden Algorithmus ausführen:

  • Holen Sie Daten aus der ersten Tabelle.
  • Verwenden Sie einige der Daten aus jeder Zeile, suchen Sie mehr Daten mit einem API-Aufruf . Die URL der API ist umgebungsspezifisch (daher der dritte Punkt oben).
  • Aktualisieren Sie die von der API zurückgegebenen Daten in die neu hinzugefügten Spalten.
  • Wiederholen Sie die obigen Schritte für die nächste Tabelle.

P.S. - Ich weiß, das Hinzufügen von Spalten, die von anderen Spalten in derselben Tabelle abhängen, entspricht nicht der 3. Normalen usw., aber aus Gründen, die außerhalb dieser Stelle liegen, ist es erforderlich.

Tech-Stack -

  1. Frühling Boot 1.3.x
  2. Flyway 4.0.3
  3. Mit Java Migration

Ein paar Beispiele, die ich versuchte, wie unten -

Mein Flugweg m Die Immigrationsklasse ist wie folgt.

public class R__MigrationYeah implements SpringJdbcMigration { 

    @Value("${mypath.subpath}") // this does not work ! 
    private String someStringIwannaUse; 


    @Inject // this does not work either (even with Autowired or Const. injection)! 
    private MyService myService; 

} 

Ich habe einige Beiträge/Blogs gesehen, die komplizierten Details zu haben, wie Flugrouten konfigurieren MigrationResolver oder ConfigurationAware usw. - und nicht sicher, ob sie dieses Problem lösen (auch wenn sie es tun - es ist nur eine Menge Arbeit um ein schnelles Migrationsskript zu schreiben - ist das der einzige Weg?). Schließlich - Ich weiß, dass ich etwas vermisse, denn wenn wir Java - Code schreiben müssen, ohne in der Lage zu sein, ALLE vorhandenen Anwendungsklassen über Spring zu benutzen, dann ist das nichts anderes als ein unabhängiges Migrationsprojekt zu schreiben Mehrwert durch die Flyway, außer dass eine DB-Verbindung verfügbar ist) - Ich bin mir sicher, dass das nicht der Fall sein kann.

Jede Hilfe wäre toll dabei!

+0

** UPDATE ** - wir haben schließlich die Umgehungslösung verwendet (wie im letzten Abschnitt in Frage, und auch in der Antwort unten von @DanielKafer). Da dies nicht von der Flyway Out-of-Box verfügbar ist. _P.S. nicht klar, warum die Frage oder die Antworten unten abgelehnt werden? Bin neu zu SO, vermisse ich etwas? –

Antwort

0

Es ist nicht möglich, die Abhängigkeitsinjektion in einer Migrationsdatei zu verwenden.

Die nächste Version von Flyway unterstützt die Abhängigkeitsinjektion von Frühlingsbohnen. Weitere Informationen finden Sie unter Github issue. Auf Stack Overflow ist eine Problemumgehung für die aktuelle verfügbare Version.

-2

Ich denke, dass Sie flyway dynamischer verwenden möchten als es für entworfen wurde. Grundsätzlich ist es nur für DB-Schema, Sie können alles tun, was SQL tun kann, aber seit macht es Job in einer wiederholbaren, zuverlässigen, Schritt-für-Schritt-Art, die Sie keine echten Geschäftsdaten darin wollen. Flyway verwendet statische Skripts, die Sie zur Verfügung stellen. Sie können sie nicht dynamisch über die Zeit ändern (dies würde protestieren, wenn die Prüfsumme nicht übereinstimmt) oder mit "API-Calls".

-2

Für diese Art von Sachen können Sie Ihre eigene Spring Boot App erstellen und Flyway über ihre Java API verwenden. Etwas in dieser Richtung.