2016-05-10 6 views
0

Ich versuche, eine sehr spezifische Anforderung in unserer Anwendung Grails 2.5.x zu erfüllen: Ich möchte das Datenbankschema vor dem Start der Anwendung aktualisieren, indem Sie eine Reihe von Datenbankkonvertierungsprogrammen anwenden (abhängig von der DB-Version/App-Version)). Wir haben das in der Vergangenheit in einer "traditionellen" Java-Servlet-App gemacht, aber ich kämpfe ein wenig mit Grails.Gibt es in Grails einen Vor-GORM-Init-Hook?

Frage: ist es ein Ereignis, in Grails, dass ich irgendwie in während der App-Start-Haken könnte, die mir Groovy und bestehende Datasource-Konfiguration zu verwenden, würde es ermöglichen, noch würde auftreten, bevor die GORM/Hibernate startet?

Einige Optionen habe ich bereits geprüft:

  • BootStrap init Schließung würde hier nicht funktionieren, da die App einfach nicht mit dem „validieren“ -Modus, wenn das Datenbankschema veraltet war beginnen würde.
  • Es gibt Events.groovy, die ich noch nicht benutzt habe, aber diese Ereignisse scheinen eher auf den Kompilierungs/Build-Lebenszyklus von Grails als auf die eigenständige Anwendung in einer WAR-Datei und auf einen App-Container ausgerichtet zu sein.
  • Das Grails database-migration Plugin scheint ähnlich zu sein und erwartet Grails Befehlszeile auf dem Zielserver verfügbar sein und die Konvertierung manuell vom Administrator durchgeführt werden. Es stellt sich heraus, dass ich hier höchstwahrscheinlich falsch lag.
+1

Eigentlich können Datenbankmigrationen automatisch beim Start der App ausgeführt werden und nicht rein manuell sein. Ich empfehle Ihnen, das Plugin noch einmal anzusehen, da es genau das ist, wonach Sie suchen. –

+0

Danke Joshua - Ich werde es überprüfen! Vielleicht habe ich nach einem schnellen Lesen der Plugin-Beschreibung die falsche Idee. – Rado

+1

grails.plugin.databasemigration.updateOnStartFileNames = ['ihre-db-spezifische-changelog-filename.groovy'] <- alle Überarbeitungen unserer Datenbank werden durch Migrationsskripte erledigt. Wir haben verschiedene Skripte abhängig von h2, Oracle, SQLServer, MySQL. Datenbank-Migration ist in der Regel sehr leistungsfähig. – railsdog

Antwort

0

Während ich habe festgestellt, nicht wirklich einen Weg in den Grails Start Haken vor der GORM Inbetriebnahme stattfindet (und führt Datenbankvalidierung oder Schöpfung) gibt es eine Möglichkeit, benutzerdefinierte Datenbankmigration Code auszuführen über BootStrap einfach init indem Sie alle hbm2ddl von Hibernate deaktivieren (lassen Sie einfach einen der gültigen dbCreate-Werte weg).

Für unser Projekt verwendeten wir am Ende die Datenbank-Migration Plugin, aber ich erkannte bald, dass, damit es richtig funktioniert, Sie auch hhm2ddl deaktivieren müssten. Wenn die Option validate verwendet wurde, würde GORM versuchen, die Datenbank zu validieren, bevor die Datenbankmigration stattfand und die App nicht gestartet wurde.

So könnte derselbe Ansatz verwendet werden, wenn eine benutzerdefinierte Implementierung des Datenbankupgrade-/Migrationscodes bereitgestellt werden soll. Durch die Deaktivierung von hbm2ddl kann sie ausgeführt werden, ohne die Datenbankschemavalidierungen von Hibernate zu beeinträchtigen. Der offensichtliche Nachteil besteht darin, dass der Validierungsmodus nicht mehr verwendet werden kann.